|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 如果还冇你 于 2022-6-7 17:59 编辑
已知条件:设计一个子程序,将下面四列全是字母,以0结尾的字符串,全部转化为大写
assume cs:code
data segment
db 'word',0
db 'unix',0
db 'wind',0
db 'good',0
data ends
作答:
assume cs:code
data segment
db 'word',0
db 'unix',0
db 'wind',0
db 'good',0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0
mov cx,4 ;最外层循环4行
s:call capital
add si,5 ;这里我不理解呀 为什么si+5就会跳到下一行
loop s
mov ax,4c00h
int 21h
capital:push cx ;保护cx不被改写
push si ;保护si不被改写
change: mov cl, byte ptr [si] ;
mov ch, 0 ;
jcxz ok ;判断CX是否为0 为0则跳
and byte ptr [si], 11011111b ;进行and运算 修改为大写
inc si ;si自增1
jmp short change ;跳转到change 进行小循环
ok: pop si ;si出栈
pop cx ;cx出栈
ret ;返回到call语句的下一行
code ends
end start
ds:[si] 不应该是当偏移地址si大于16的时候 段地址才会从1000:0000H自动跳到1000:0010H吗 |
|