鱼C论坛

 找回密码
 立即注册
查看: 3604|回复: 10

实验四第三小题

[复制链接]
发表于 2012-6-12 21:39:58 | 显示全部楼层

这个计算有多种方法,如果你熟悉每个指令占内存的大小,可以人工计算,还有你可以先随机赋值一个数给cx,再利用DEBUG的U命令查看内存大小,还有一种就是你可以利用计算机自己计算,后面你会学到的,代码如下:
assume cs:code
       code segment
s0:       mov ax,cx
           mov ds,ax
           mov ax,0020h
           mov es,ax
           mov bx,0
           mov cx,offset s1 - offset s0
s:         mov al,[bx]
           mov es:[bx],al
           inc bx
           loop s
s1:       mov ax,4c00h
           int 21h
         code ends
         end
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-6-13 12:28:13 | 显示全部楼层
第一个空是mov ax,cs  意思是将你code segment这个代码段的段地址赋值于ds中,第二个空好像是mov cx,10h意思是将从mov ax,cs到loop s这些指令在内存中占的字节数的大小赋值在cx中,再在后面的loop指令中循环cx次,每次复制一个字节到0:200h处。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-6-14 12:40:00 | 显示全部楼层
努力学习 发表于 2012-6-13 20:21
第二个空还是没理解,答案里好像是先填一个较大的数,然后再debug查看出cx的值,然后再减去mov ax,4c00h  ...

s:         mov al,[bx]
           mov es:[bx],al
           inc bx
           loop s

这上面的意思是把ds:[bx]内存单元上的值赋给es:[bx]中,而且是以al(占1个字节)为中介,那么loop指令就是要循环多少次,才可以把你从mov ax,cs到mov ax,4c00h的指令在内存中占字节数复制到0020h:0处。所以说mov cx,10h就是循环的次数,取决于你指令所占的字节的大小而已
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-13 09:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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