鱼C论坛

 找回密码
 立即注册
查看: 147|回复: 2

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

[复制链接]
发表于 2022-6-7 16:45:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2022-6-7 21:43:37 From FishC Mobile | 显示全部楼层
       变化的只是偏移,段地址永远不会自己改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2022-6-8 07:56:19 | 显示全部楼层
jackz007 发表于 2022-6-7 21:43
变化的只是偏移,段地址永远不会自己改变。

感谢回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2022-10-3 04:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表