Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如果等于x86程序集,则跳转_Assembly_X86_Ascii - Fatal编程技术网

Assembly 如果等于x86程序集,则跳转

Assembly 如果等于x86程序集,则跳转,assembly,x86,ascii,Assembly,X86,Ascii,我不明白为什么它不跳到L1,即使我输入'y'请帮助我,我是x86汇编编程新手 0ah指令在DS:DX接受缓冲区,并用输入的字符填充缓冲区。所以你可能需要 mov answ, 11 lea bx, answ ;scanf mov ah, 0ah int 21h cmp [bx], 79h JE L1 此外,若您只需要读取一个字符(使用07h),则缓冲区将填充其长度和其他信息,而不使用echo。字符将被放入AL中 我想我应该指出一些关于您的

我不明白为什么它不跳到L1,即使我输入'y'请帮助我,我是x86汇编编程新手

0ah指令在DS:DX接受缓冲区,并用输入的字符填充缓冲区。所以你可能需要

    mov answ, 11
    lea bx, answ    ;scanf
    mov ah, 0ah
    int 21h


    cmp [bx], 79h
    JE L1
此外,若您只需要读取一个字符(使用07h),则缓冲区将填充其长度和其他信息,而不使用echo。字符将被放入AL中


我想我应该指出一些关于您的代码的事情:由于
cmp mem,imm
是模棱两可的,因此最好根据所使用的汇编程序编写
cmp byte[dx]、79h
cmp byte ptr[dx]、79h
。此外,任何像样的汇编程序都应该支持使用
'y'
作为立即数而不是
79h
,这会使代码更加清晰。在x86上,16位寄存器dx、cx和ax不能用作括号[]之间的地址寄存器。只有bx、si、di、bp和sp以及386+上的所有32位寄存器。有用的指令有:“cmp字节[bx],79h”“cmp字节[si],79h”或“cmp字节[di],79h”;将该字节与使用lea dx、answ cmp[dx]79h尝试过的DS:BX、DS:SI或DS:DII进行比较,但不起作用。EMU8086说它可能是一个未定义的var,但这样做cmp answ[2]似乎有效,你能给我解释一下吗?如果你知道为什么,那是对的。cmp比较字,若要与字节进行比较,可能需要cmpb。根据规范,answ[2]保存输入字符串的第一个字节。answ[0]保存缓冲区的大小,answ[1]是缓冲区中存储的实际字符数。
lea dx, answ
...
cmp [dx], 79h