簡體   English   中英

為什么這段匯編代碼會永遠執行jmp

[英]why this assembly piece of code do jmp forever

我寫了代碼,但是我不知道為什么它會永遠提示用戶,實際上,除非按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寄存器中。

我還有另一個問題,如何設計{或制作}這樣​​的樣式,以使樣式更好的C / C ++樣式的算法?

非常感謝。

也許,您可以通過插入推入式彈出按鈕來解決問題,以確保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;

另一個問題可能是“ je exit”。 替換為

jmp exit

或“ jmp短退出”。 這樣可以節省cPU不會在l1繼續

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM