如果还冇你 发表于 2022-6-7 16:45:22

关于王爽老师《汇编语言第三版》P204的问题10.2 (救救孩子)

本帖最后由 如果还冇你 于 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        ;
            mov ch, 0                     ;
            jcxz ok                         ;判断CX是否为0为0则跳
            and byte ptr , 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大于16的时候段地址才会从1000:0000H自动跳到1000:0010H吗

jackz007 发表于 2022-6-7 21:43:37

       变化的只是偏移,段地址永远不会自己改变。

如果还冇你 发表于 2022-6-8 07:56:19

jackz007 发表于 2022-6-7 21:43
变化的只是偏移,段地址永远不会自己改变。

感谢回复
页: [1]
查看完整版本: 关于王爽老师《汇编语言第三版》P204的问题10.2 (救救孩子)