簡體   English   中英

如何在部件x86中使用cmp參數

[英]How to work with the cmp parameter in assembly x86

我的cmp命令有問題。 無論我傳遞什么結果,程序都會忽略cmp結果並運行代碼的所有部分。 誰能幫我嗎?

     ;tipo de bandeira
    mov ah, 40h
    mov bx, 1
    mov cx, 24
    mov dx, bandeira
    int 21h

    ;linha
    mov ah, 40h
    mov bx, 1
    mov cx, 1
    mov dx, linha
    int 21h

    ;input e confirmação do tipo de bandeira
    mov ah, 3Fh
    mov bx, 00
    mov cx, 1
    mov dx, tipoBandeira
    int 21h

    ;clear feed
    mov ah, 3Fh
    mov bx, 00
    mov cx, 2
    mov dx, crlf
    int 21h

    cmp[tipoBandeira],01
    je T1
    cmp[tipoBandeira],02
    je T2


    T1:
    mov ah, 40h
    mov bx, 1
    mov cx, 08
    mov dx, quad
    int 21h

    T2:
    mov ah, 40h
    mov bx, 1
    mov cx, 11
    mov dx, rect
    int 21h

我對匯編語言很陌生,我有一個很爛的老師,用“使用google”來回答我們所有的問題,而忽略了許多匯編類型,而這確實不是一種直截了當的語言。

問題所在

cmp [tipoBandeira],01
je T1
cmp [tipoBandeira],02
je T2

T1:
mov ah, 40h
mov bx, 1
mov cx, 08
mov dx, quad
int 21h

T2:
mov ah, 40h
mov bx, 1
mov cx, 11
mov dx, rect
int 21h

是以下內容:

  • 如果[tipoBandeira] = 1,則執行T1,然后執行T2
  • 如果[tipoBandeira] = 2,則執行T2
  • 如果[tipoBandeira]其他,則執行T1,然后執行T2

您缺少來自compare和T1塊的退出。 您想要的可能是這樣的:

cmp [tipoBandeira],02  ;if tipoBandeira = 2
je T2                  ;  go to T2
cmp [tipoBandeira],01  ;else if tipoBandeira = 1
jne EXIT               ;  go to T1
                       ;else go to EXIT
T1:
mov ah, 40h
mov bx, 1
mov cx, 08
mov dx, quad
int 21h
jmp EXIT                ;end if

T2:
mov ah, 40h
mov bx, 1
mov cx, 11
mov dx, rect
int 21h

EXIT:                   ;end if
...

暫無
暫無

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

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