为什么这个汇编代码永远执行jmp

时间:2014-11-24 18:21:23

标签: algorithm assembly disassembly

我写了代码,但我不知道为什么它会永远地从用户提示,实际上它永远不会结束,除非按Enter键而不给任何数字。 这段代码:

output prompt1;
    inputs number,16 ;
    atoi number ; 
    mov max,ax ;
    mov cx , 10 ;

do:     dec cx ;
    output prompt1;
    inputs number,16;
    atoi number ;
    cmp ax, max;
    jge l1;
    cmp cx , 1;
    jne do ;
    je exit;

l1:     mov max ,ax ;
    jmp do ;

exit:   
    output prompt2;
    itoa number , max;
    output number;
输入输出是一些用户界面设施, itoa,atoi 分别是ascii的整数,反之亦然,但我应该强调" atoi"将结果保存在ax寄存器中。

我有另一个问题,如何设计{或制作}这样​​的{if,while,for C / C ++ styleled}算法更加精美?< / p>

非常感谢你。

1 个答案:

答案 0 :(得分:0)

也许,你可以通过插入一个push和pop来解决问题,确保cx没有改变

在“do”和“cmp cx,1”之间:

do:     dec cx ;
push cx
output prompt1;
inputs number,16;
atoi number ;
cmp ax, max;
jge l1;
pop cx
cmp cx , 1;
jne do ;
je exit;

另一个问题可能是“出口”。替换为

jmp exit

或“jmp short exit”。这样,省钱,cPU将不会继续在l1