我想打印出字符串的偶数字符。到目前为止,我得到了这个代码(这个代码打印出整个字符串(:
.MODEL SMALL
.STACK
.DATA
adat DB "Test test",0
.CODE
main proc
MOV AX, DGROUP
MOV DS, AX
LEA BX, adat
new:
MOV DL, [BX]
OR DL, DL
CALL WRITE_CHAR
JZ stop
INC BX
JMP new
stop:
MOV AH,4Ch ;Kilépés
INT 21h
main endp
write_char proc
PUSH AX
MOV AH, 2
INT 21h
POP AX
RET
write_char endp
END main
到目前为止,我已经能够到达那里。我以前试过一些东西,但都不起作用。
OR DL, DL CALL WRITE_CHAR JZ stop
当CALL WRITE_CHAR
返回时,从OR DL, DL
指令定义的标志将消失!因此,循环可能没有运行所需的次数。
字符串中的偶数字符是什么?
- 是位于字符串中偶数偏移上的字符吗
main proc
mov ax, DGROUP
mov ds, ax
xor bx, bx ; (*)
jmp char
next:
inc bx ; The sought for EVEN offset just became ODD here ...
test bx, 1
jz char ; ... so using opposite condition to skip
mov ah, 02h ; DOS.WriteChar
int 21h
char:
mov dl, adat[bx]
test dl, dl
jnz next
mov ax, 4C00h ; DOS.Terminate
int 21h
main endp
- 是第2、4、6、。。。在字符串中的位置,所以以奇数偏移
main proc
mov ax, DGROUP
mov ds, ax
xor bx, bx ; (*)
jmp char
next:
inc bx ; The sought for ODD offset just became EVEN here ...
test bx, 1
jnz char ; ... so using opposite condition to skip
mov ah, 02h ; DOS.WriteChar
int 21h
char:
mov dl, adat[bx]
test dl, dl
jnz next
mov ax, 4C00h ; DOS.Terminate
int 21h
main endp
- 还是ASCII码是偶数的字符
main proc
mov ax, DGROUP
mov ds, ax
xor bx, bx
jmp char
next:
inc bx
test dl, 1 ; Testing ASCII
jnz char ; Skip on ODD code
mov ah, 02h ; DOS.WriteChar
int 21h
char:
mov dl, adat[bx]
test dl, dl
jnz next
mov ax, 4C00h ; DOS.Terminate
int 21h
main endp
(*(我们可以使用地址寄存器来对字符串进行寻址,而不是使用额外的寄存器来测试均匀性。
在这些代码片段中,通过将字符串终止测试放在循环底部附近并执行一次性跳转,避免了重复无条件跳转