【问题标题】:Storing double digits as variable将两位数存储为变量
【发布时间】:2021-09-11 05:11:20
【问题描述】:

所以我有这个餐厅订单系统的代码

mov ah,09h          ;      
lea dx,getValueMsg  ; Display get value massege
int 21h             ;

mov ah,01h          ;      
int 21h             ; User input the value
sub al,30h          ;        
mov countChicken,al ;

cmp countChicken,1        ;
jb  errorGetChickenValue  ;
                          ; Checking chicken chop value
cmp countChicken,8        ;
ja  errorGetChickenValue  ;

我了解到我可以使用var db 0 来存储鸡肉值,但如果我没记错的话,它只能存储一个数字。
我需要存储一个两位数的值,例如 19。我该怎么做?

【问题讨论】:

    标签: assembly input digits emu8086


    【解决方案1】:

    我知道我可以使用var db 0 来存储鸡肉值,但是如果我没记错的话它只能存储一个数字

    定义为 byte (db) 的变量可以保存从 0 到 255 的无符号数字。这绝对不止是从 0 到 9 的单个数字。

    我需要存储一个两位数的值,例如 19。我该怎么做?

    如果您需要两位数的值,则必须使用 DOS.InputCharacter 函数 01h 两次,并将这些数字组合成一个 0 到 99 范围内的数字。输入的第一个数字是最有效数字,您必须将其乘以 10。然后将输入的第二个数字添加到此:

    使用mul,11条指令23字节

    mov ah, 01h
    int 21h        ; -> AL
    sub al, 30h
    mov bl, 10
    mul bl         ; AX = AL * BL
    mov bl, al
    mov ah, 01h
    int 21h        ; -> AL
    sub al, 30h
    add al, bl
    mov countChicken, al
    

    使用AAD,8条指令18字节

    mov ah, 01h
    int 21h        ; -> AL
    mov bl, al
                   ; AH = 01h
    int 21h        ; -> AL
    mov ah, bl
    sub ax, 3030h
    aad            ; AX = AH * 10 + AL
    mov countChicken, al
    

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2022-01-18
      相关资源
      最近更新 更多