我正在尝试弄清楚如何使用我的光标一次循环一个字符的字符串。
我编写的程序能够在字符串中获取特定的索引。
但是,如何一次循环遍历整个字符串中的一个字符呢?
title Hello World Program (hello3.asm)
;
; This is the sample program on page 572 of your text with little modification
;It utilizes Dos service 40h.
;
.model small
.data
message db "Hello, Dos Here!",0dh,0ah,'$'
.code
main proc
mov ax, @data
mov ds, ax
mov cx, 5
L1:
mov ah, 2
mov dl, message
int 21h
loop L1
mov ax, 4c00h
int 21h
main endp
end `
发布于 2016-10-20 01:25:25
正如@Michael所建议的,您需要将字符串的地址放入一个寄存器中,例如SI,然后一次递增SI一个字节(一个字符)。当到达char '$‘时,循环必须结束:
.model small
.data
message db "Hello, Dos Here!",0dh,0ah,'$'
.code
main proc
mov ax, @data
mov ds, ax
; mov cx, 5 ;<=== WE DON'T NEED CX BECAUSE WE AREN'T
; USING THE LENGTH OF THE STRING, WE
; ARE USING THE '$' CHAR.
mov si, offset message ;<=== SI POINTS TO FIRST CHARACTER OF STRING.
L1:
;CHECK IF '$' (LAST CHAR) IS THE CURRENT CHAR.
mov dl, [si] ;<=== CURRENT CHARACTER TO PRINT.
cmp dl, '$' ;<=== IF CURRENT CHAR IS '$'...
je finish ;<=== ... JUMP TO FINISH.
;PRINT CHAR IN DL.
mov ah, 2
int 21h
;loop L1 ;<=== WE DON'T NEED LOOP BECAUSE
; WE ARE NOT USING CX.
inc si ;<=== NEXT CHAR OF THE STRING.
jmp L1 ;<=== REPEAT.
finish:
mov ax, 4c00h
int 21h
main endp
end https://stackoverflow.com/questions/40136929
复制相似问题