我在互联网上找到了这个字符串操作代码,用于反转字符串的内容。任何人都可以解释如何确定字符串的长度,美元在任何类型的字符串程序中表示什么?
model small
.stack 100h
.data
String1 db 'assembly language program', $
Length dw $-String1-1
.code
Main proc
MOV AX, @data
MOV DS, AX
MOV SI, offset String1
MOV CX, Length
ADD SI, CX
Back: MOV DL, [SI]
MOV AH, 02H
INT 21H
DEC SI
LOOP Back
MOV AH, 4CH
INT 21H
End
答案 0 :(得分:1)
String1 db 'assembly language program', $ Length dw $-String1-1
你在这个程序中有2个$ -signs,每个都有另一个含义。
...program','$'
或仅包含在字符串...program$'
的其余部分中。让我们关注第二种情况。
在行String1 db 'assembly...'
中,用户定义的符号 String1 表示字符串在内存中开始的地址。当汇编程序随后处理行Length dw ...
时, $ 具有该行的地址,因此也是前一行结尾的地址(两者都相同)。登记/>
由于我们知道字符串的起始位置( String1 )及其结束位置( $ ),因此使用Length dw $-String1
进行简单的减法就可以确定长度。
减去额外的1,因为我们不希望字符串终止$字符包含在计数中! Length dw $-String1-1
请注意您在互联网上找到的内容!此程序错误。它错误地包含终止$字符但忘记使用字符串的第一个字符。
下一个代码解决了这个问题:
MOV SI, offset String1
MOV CX, Length
ADD SI, CX
Back:
DEC SI
MOV DL, [SI]
MOV AH, 02h
INT 21h
LOOP Back