寄存器冲突的问题(1005)

本文为《汇编语言程序设计》1005小节例程。点击链接…进课程主页。

问题:编程将data段中的字符串转化为大写。

assume cs:code
data segment
             db 'conversation'
data ends
code segment 
start:   mov ax,data
         mov ds,ax
         mov si,0
         mov cx,12      
         call capital
         mov ax,4c00h
         int 21h
capital: and byte ptr [si],11011111b
         inc si
         loop capital
         ret
code ends
end start

用0作为字符串的结束

assume cs:code
data segment
         db 'conversation',0
         data ends
code segment
start:    mov ax,data
          mov ds,ax
          mov si,0
          call capital
          mov ax,4c00h
          int 21h
capital:  mov cl, [si]
          mov ch, 0
          jcxz ok
          and byte ptr [si], 11011111b
          inc si
      ok: ret
code ends
end start

将以下字符串转为大写

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 bx,0
          mov cx,4
       s: mov si,bx
          call capital
          add bx,5
          loop s
          mov ax,4c00h
          int 21h
capital: mov cl,[si]
           mov ch,0
           jcxz ok
           and byte ptr [si],11011111b
           inc si
           jmp short capital
     ok: ret
code ends
end start
;程序中cx既用于循环,又用于读取数据——冲突!

解决了寄存器冲突的程序

;正确的程序
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 bx,0
          mov cx,4
       s: mov si,bx
          call capital
          add bx,5
          loop s
          mov ax,4c00h
          int 21h
 capital: push cx
          push si
  change: mov cl,[si]
          mov ch,0
          jcxz ok
          and byte ptr [si],11011111b
          inc si
          jmp short change
      ok: pop si
          pop cx
          ret
code ends
end start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值