21,458
社区成员
发帖
与我相关
我的任务
分享
xh: cmp byte ptr [bx],0 ;标识xh符号,方便跳回,指令意思为 ,比较ds:bx为字节单元的数据是否为零,因为我们都知道,所有的字符串的ascii码均有对应的10进制数字,那么也就是说明所有的字符均不等于零,包括空格感叹号。所有的字符串均等于一个字节的单位。这样就可以简单的实现了我们的字符串自动检查长度。
ja go ;ja的意思为“高于(不包括等于)比较的数值的时候跳转至go”
jz over ;jz的意思为“如果ZF标志位为零,那么跳转至over,结束这个无条件循环”
go: inc ax ;如果ja指令检查到我们比较的ds:bx大于0的话,那么ax加1,来记录有多少个字节,并且bx加1指向下一个内存单元
inc bx
jmp short xh ;跳回至xh,直到jz指令成立就结束循环
over: mov cx,ax
assume cs:code
data segment
db 'Welcome to masm!'
db 16 dup (0)
data ends
code segment
start: mov ax,data
mov ds,ax
mov es,ax
mov si,0
mov di,16
mov bx,0
mov ax,0
;检查字节开始
xh: cmp byte ptr [bx],0
ja go
jz over
go: inc ax
inc bx
jmp short xh
over: mov cx,ax
cld
rep movsb ;rep为循环指令,循环次数为CX,movsb为copy指令,并每次拷贝[ds:si]到[es:di]的内存字节单元数据
mov ax,4c00h
int 21h
code ends
end start