0

我有以下 asm 代码(x86)。

.input:
mov ah, 00h         ; get key from keyboard buffer
int 16h         ; interrupt 16h 
mov dl, al      ; move ASCII code into dl
mov ah, 02h     ; function 02
int 21h         ; interrupt 21h
mov ah, 0Eh     ; tell the BIOS to print the character in the AL register
mov al, dl      ; copy dl into al
int 10h         ; print al
sub al,0Dh      ; check if it's carriage return
jz 01h          ; jump relative 1 (to skip newLine)
call newLine        ; add CR LF
jmp .input      ; loop

但是,如果零指令没有按预期(希望)工作,即 jz 01h,则跳转。

我想跳过相对的 1 条指令(或向 IP 加一条),以跳过 call newLine 子程序。

目前,当我按下回车键并调用 jz 指令时,我相信程序在程序运行的早期就绝对跳跃,因为一段代码。

有任何想法吗?

谢谢,史蒂夫

4

2 回答 2

5

Jump 01h 实际上不会跳过调用,因为它计算的是字节数,而不是指令数。调用指令由多个字节组成。为什么不在调用后添加另一个可以跳转的标签,例如 jz .afterCall?

于 2012-04-12T16:47:22.010 回答
1

关于什么

jz _no_newLine      ; jump 
call newLine        ; add CR LF
_no_newLine:
jmp .input          ; loop
于 2012-04-12T16:48:18.940 回答