如何在程序集 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
我是汇编的新手,我有一个很糟糕的老师,他用 "use 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
您缺少来自比较和 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
...
我的 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
我是汇编的新手,我有一个很糟糕的老师,他用 "use 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
您缺少来自比较和 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
...