在8000H开始的长度为1000字节的字符串中查找’S’,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。(采用子程序调用),,data segment ADDR DW ? BUF DB 'ASDFGHJKIGKLMNOPQRST$' data ends code segment assume cs:code start: MOV DI,8000H MOV CX,1000 MOV AL,'S' MOV ADDR,0FFFFH GOON: SCASB LOOPNZ GOON JNZ DONE DEC DI MOV ADDR,DI DONE: HLT code ends end start 这段代码有什么错误,该如何修改
时间: 2024-01-11 18:02:09 浏览: 83
从一个字节字符串中查找字符‘#’,如果查到则将其偏移地址送到存储单元addr中,否则将0送到addr中
4星 · 用户满意度95%
这段代码有两个问题:
1. 在使用 LOOPNZ 指令之前,需要先使用 REPNE 前缀指令,否则会导致死循环。
2. 在找到字符后,需要将 DI 寄存器的值减 1 才能使其指向字符的偏移地址,否则会指向下一个字符的偏移地址。
修改后的代码如下:
```
data segment
ADDR DW ?
BUF DB 'ASDFGHJKIGKLMNOPQRST$'
data ends
code segment
assume cs:code
start:
MOV DI, 8000H
MOV CX, 1000
MOV AL, 'S'
MOV ADDR, 0FFFFH
GOON:
REPNE SCASB
JNZ DONE
DEC DI
MOV ADDR, DI
DONE:
HLT
code ends
end start
```
阅读全文