鱼C论坛

 找回密码
 立即注册
查看: 3020|回复: 8

请教大家一下

[复制链接]
发表于 2016-11-18 14:43:47 | 显示全部楼层 |阅读模式

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

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

x
实验4 [bx]和loop的使用

(2)编程,向内存0:200~0:23f依次传递数据0~63(3fh),程序中只能使用9条指令,9条指中包括“mov ax,4c00h”和“int 21h”。

assume cs:code

code segment

     mov ax,20h

     mov ds,ax

     mov bx,0

     mov cx,40h    ;或mov cx,64

s:   mov [bx],bl

     inc bx

     loop s

     mov ax,4c00h

     int 21h

code ends

end

实验4 [bx]和loop的使用

(3)下面的程序功能是将“mov ax,4c00h"之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。

assume cs:code   

code segment   

     mov ax, code ;或mov ax, cs  

     mov ds,ax   

     mov ax,0020h   

     mov es,ax   

     mov bx,0   

     mov cx, 18h   ;或mov cx, 17h    ;或sub cx,5

  s: mov al,[bx]   

     mov es:[bx],al   

     inc bx   

     loop s   

     mov ax,4c00h   

     int 21h   

code ends   

end


此题有多个答案,因为mov用在寄存器之间传送数据的指令是2个字节,用在寄存器和立即数之间是3个字节

答案1:mov ax,cs  (占2个字节)  

     mov cx,17

答案2:mov ax,code (占3个字节)

     mov cx,18


这里的循环17次或者18次,是怎么算出来的?
-u

0C79:0000 B82000        MOV     AX,0020

0C79:0003 8ED8          MOV     DS,AX

0C79:0005 BB0000        MOV     BX,0000

0C79:0008 B94000        MOV     CX,0040

0C79:000B 881F          MOV     [BX],BL

0C79:000D 43            INC     BX

0C79:000E E2FB          LOOP    000B


0C79:0010 B8004C        MOV     AX,4C00

0C79:0013 CD21          INT     21

0C79:0015 CC            INT     3

0C79:0016 FFFF          ???     DI

0C79:0018 50            PUSH    AX

0C79:0019 8D8600FF      LEA     AX,[BP+FF00]

0C79:001D 50            PUSH    AX

0C79:001E 8D4680        LEA     AX,[BP-80]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-18 15:05:54 | 显示全部楼层
17次 18次..
题的意思是把指令复制到内存0:200中。2个字节的机器码比如e812(乱写的机器码别打我)
而三个字节的机器码就是e81201  机器码意思别问我 我乱打的。意思就是2个字节的有4个东东 3个字节的有6个东东。
因为汇编指令最终还是要转换机器码给计算机用的,   字节的多少决定了机器码的多少。要复制指令 然而计算机是看不懂指令的 只看得懂机器码。所以是不是要复制机器码给计算机看。
mov ax,寄存器 是4个机器码。
mov ax, code是6个机器码。
上面的循环。
执行一次循环是把2个机器码转移
意思知道了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-18 15:13:25 | 显示全部楼层
那不是18次 17次。。
18h 17h.. 这是16进制。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-18 15:22:18 | 显示全部楼层
auyhin丶 发表于 2016-11-18 15:05
17次 18次..
题的意思是把指令复制到内存0:200中。2个字节的机器码比如e812(乱写的机器码别打我)
而三 ...

对,是复制的机器码?但是17,18个是怎么来的,是不是数cs的偏移地址单元个数或者机器码个数,我怎么数的是16个呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-18 15:27:12 | 显示全部楼层
来学习编程 发表于 2016-11-18 15:22
对,是复制的机器码?但是17,18个是怎么来的,是不是数cs的偏移地址单元个数或者机器码个数,我怎么数的 ...

不是17 18. 17h是23.. 18h是24..
1次2个机器码。

0C79:0000 B82000        MOV     AX,0020
上面的B82000就是机器码.就是6个机器码了。。
到int 21h 结束。你再算算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-18 15:31:58 | 显示全部楼层
auyhin丶 发表于 2016-11-18 15:13
那不是18次 17次。。
18h 17h.. 这是16进制。

cx里的循环次数,在写程序的时候是10进制还是16进制啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-18 15:35:12 | 显示全部楼层
auyhin丶 发表于 2016-11-18 15:13
那不是18次 17次。。
18h 17h.. 这是16进制。

实验4第三问,cx那里要是17h,18h,16进制,我更不明白了,循环次数怎么算出来的,不是应该数cs:ip吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-18 15:35:39 | 显示全部楼层
在debug里面的数是16进制。
我们汇编工具是10进制。
工具里加h就是16进制。
加b就是2进制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-18 15:50:47 | 显示全部楼层
来学习编程 发表于 2016-11-18 15:35
实验4第三问,cx那里要是17h,18h,16进制,我更不明白了,循环次数怎么算出来的,不是应该数cs:ip吗

要复制的是指令.而且把指令放到0:200   那么怎么才能复制指令过去呢? 是不是把指令对应的ip里面存放的内容给过去? 或者说把机器码给过去?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 05:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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