在程序集(MASM)中显示字符串的偶数字符



我想打印出字符串的偶数字符。到目前为止,我得到了这个代码(这个代码打印出整个字符串(:

.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

(*(我们可以使用地址寄存器来对字符串进行寻址,而不是使用额外的寄存器来测试均匀性。

在这些代码片段中,通过将字符串终止测试放在循环底部附近并执行一次性跳转,避免了重复无条件跳转

相关内容

  • 没有找到相关文章

最新更新