首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编语言函数2循环

汇编语言函数2循环
EN

Stack Overflow用户
提问于 2016-10-20 00:29:09
回答 1查看 115关注 0票数 0

我正在尝试弄清楚如何使用我的光标一次循环一个字符的字符串。

我编写的程序能够在字符串中获取特定的索引。

但是,如何一次循环遍历整个字符串中的一个字符呢?

代码语言:javascript
复制
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 

`

EN

回答 1

Stack Overflow用户

发布于 2016-10-20 01:25:25

正如@Michael所建议的,您需要将字符串的地址放入一个寄存器中,例如SI,然后一次递增SI一个字节(一个字符)。当到达char '$‘时,循环必须结束:

代码语言:javascript
复制
.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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40136929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档