我的汇编语言代码有什么问题

时间:2016-02-19 09:16:03

标签: assembly output x86-16

我有这个代码的问题,它意味着收集一个数字并加倍,但它只接受1到9之间的数字,并输出5到9之间所有数字的两个数字的第二个值,可以是完成以允许它输出正确的值

;DOUBLE THIS PROGRAM PROMPTS THE USER TO ENTER A NUMBER
;DOUBLE THE NUMBER,AMD OUTPUT THE RESULT
.model small
.stack
.data
prompt db 0ah,0dh,  'enter the number : $'
msg db 0ah,0dh,  'Double your number is : '
result db 0ah,0dh, '$'
.code
start:
      mov ax,@data
      mov ds,ax


      lea dx,prompt             
      mov ah, 9               ;dos fn to output string up to $
      int 21h
      mov ah,1                ;dos fn to input byte into al
      int 21h
      sub al,30h                ;convert from ascii to integer
      add al,al                 ;sum inputted value to itself
      aaa
      or al,30h

      mov result,al             ;add the double value of the value to result



      lea dx, msg 

      mov ah, 9
      int 21h


      mov ah,4ch
      int 21h            

      end start

1 个答案:

答案 0 :(得分:2)

你的程序遇到了一些问题:

  • 您没有预留必要的空间来存储字节大小的结果。在db指令后需要额外的零。

    result db 0, 0ah, 0dh, '$'
    
  • 因为将数字从5加倍到9将不可避免地产生2位数结果,您只需将结果更改为字数

    result db 0, 0, 0ah, 0dh, '$'
    
  • 您正在使用aaa指令错误。幸运的是,aam指令适合您的目的。

      

    AAM将AL除以10并将商存储在AH中,其余部分保留在AL中。

    下一个代码将始终显示2位数的结果。如果需要,你可以替换字符" 0"在AL中用" "就在将AX写入结果变量之前。

    aam
    or   ax, 3030h
    xchg al, ah
    mov  result, ax