问题7.7 将datasg段中每个单词改为大写字母

思路:将暂存的外层循环次数数据放到内存单元中,需要使用的时候再从内存单元中恢复;一般来说,在需要暂存数据的时候,我们应该使用栈。

assume               cs:codesg,ds:datasg,ss:stacksg
datasg               segment
db                      'ibm             '
db                      'dec             '
db                      'dos             '
db                      'vax             '
datasg                ends
stacksg               segment                                  ;定义一个段,用来做栈段,容量为16个字节
dw                    0,0,0,0,0,0,0,0
stacksg               ends
codesg                segment
start:                     mov               ax,stacksg
                           mov               ss,ax
                           mov               sp,16
                           mov               ax,datasg
                           mov               ds,ax
                           mov               bx,0
                           mov               cx,4
s0:                        push              cx                    ;将外层循环的cx值压栈
                           mov               si,0
                           mov               cx,3                  ;cx设置为内层循环的次数
s:                         mov               al,[bx+si]
                           and               al,11011111b
                           mov               [bx+si],al
                           inc                si
                           loop               s
                           add                bx,16
                           pop                cx                     ;从栈顶弹出原cx值,恢复cx
                           loop               s0                     ;外层循环的loop指令将cx中的计数值减一
                           mov                ax,4c00H
                           int                21H
codesg                     ends
                           end                 start

  

天晴了,起飞吧
原文地址:https://www.cnblogs.com/jianqiao123/p/12251545.html