Emu8086存储8位数字问题

问题描述 投票:0回答:1

this问题中,我问为什么我的代码不起作用,我认为问题仅出现在程序尝试打印 ASCII 字符时,但从那时起我意识到还有另一个问题。

任务是接受8个字符1和0,并将结果保存在寄存器中。

我的算法如下:

这是我的代码中应该执行此操作的部分:

  mov cx,0
  mov bl,8
input:
    mov ah,07h
    int 21h

    cmp al,46
    sub al,30h

    cmp al,0
    je valid
    cmp al,1
    je valid
    jmp input

valid:
    sub bl,1
    cmp bl,0
    je exit
    
    shl cl,1
    add cl,al
    jmp input

但是当我使用模拟器检查寄存器

cl
时,它从未真正显示我想要的内容,例如,如果我输入
11000000
,值
60h
最终会保存在
cl
寄存器中,这显然是不正确的.我做错了什么?

assembly binary x86-16 data-conversion emu8086
1个回答
0
投票

如果我输入 11000000,值 60h 最终会被保存在 cl 寄存器中,这显然是不正确的。我做错了什么?

代码正确,要求输入 8 个有效的二进制数字。然而,由于决定离开循环的指令的特定位置,第八位数字不存储在 CL 寄存器中。您不允许

shl cl,1
add cl,al
发生在第八位数字上。

快速修复是将您的代码更改为:

valid:
    sub bl,1
    cmp bl,0
    je exit       <<< exits too soon the 8th time
    
    shl cl,1      <<< these need to execute 
    add cl,al     <<<   the 8th time also
    jmp input

至:

valid:
    shl  cl, 1
    add  cl, al
    dec  bl
    jnz  input

为了获得同一循环的更好/优化版本,请阅读我对上一个问题的回答无法理解为什么程序集不起作用,即使从值寄存器正确复制了值,输出也没有显示正确的结果

© www.soinside.com 2019 - 2024. All rights reserved.