【发布时间】:2015-10-26 11:24:33
【问题描述】:
好的,我一个月前开始学习 8086 汇编,直到现在我在学习它时没有遇到太多问题,但现在我被字符串困住了。问题是我如何迭代 8086 中的字符串并操作字符?我的微处理器课程还有一个任务是从给定字符串中删除所有 ' 字符(我的代码中的字符串“proce'so'r”),然后将新获取的字符串与第一个字符串进行比较并检查它们是否相等.问题是我什至不知道如何迭代它。课堂上真的没有解释,所以我在这里寻求帮助。到目前为止,这是我的代码(仅用于字符串迭代和打印字符,它不起作用,不知道为什么):
data segment
string db "proce'so'r"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
lea di, string
mov cx, 10
for:
cmp cx, 0
je end
mov dl, [di]
mov ah, 02h
int 21h
inc di
loop for
end:
mov ax, 4c00h
int 21h
ends
end start
【问题讨论】:
-
看起来不错。而不是
di和cx,我只使用di,将其初始化为零,然后将其加一,只要di < 10,并使用di作为索引保存一个寄存器。您还可以使用带有适当前缀的lods指令。您有什么具体问题吗? -
我愿意,代码不起作用,也不好:)。所以有一个错误,我找不到,我删除了 cx 并做了你所说的,但它仍然不起作用。
-
@mousepaad 好的,部分是我的错,但你应该包括一个具体的问题。尝试
dec cx和jmp for而不是loop for,这会增加cx,而不是减少它。另外,如果你还没有初始化段寄存器,那就去做吧。 -
好的,我尝试使用 jmp 而不是循环,我也尝试了此代码 stackoverflow.com/questions/27889010/… ,但它不起作用。我真的不知道问题是什么:(。
-
您忘记初始化
DS。在start之后直接插入两行:mov ax, data&mov ds, ax。
标签: string assembly x86 x86-16 emu8086