来学习编程 发表于 2016-11-18 14:43:47

请教大家一下

实验4 和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 ,bl

   inc bx

   loop s

   mov ax,4c00h

   int 21h

code ends

end

实验4 和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,   

   mov es:,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   ,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,

0C79:001D 50            PUSH    AX

0C79:001E 8D4680      LEA   AX,

auyhin丶 发表于 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个机器码转移
意思知道了吧

auyhin丶 发表于 2016-11-18 15:13:25

那不是18次 17次。。
18h 17h.. 这是16进制。

来学习编程 发表于 2016-11-18 15:22:18

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

对,是复制的机器码?但是17,18个是怎么来的,是不是数cs的偏移地址单元个数或者机器码个数,我怎么数的是16个呢

auyhin丶 发表于 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 结束。你再算算

来学习编程 发表于 2016-11-18 15:31:58

auyhin丶 发表于 2016-11-18 15:13
那不是18次 17次。。
18h 17h.. 这是16进制。

cx里的循环次数,在写程序的时候是10进制还是16进制啊

来学习编程 发表于 2016-11-18 15:35:12

auyhin丶 发表于 2016-11-18 15:13
那不是18次 17次。。
18h 17h.. 这是16进制。

实验4第三问,cx那里要是17h,18h,16进制,我更不明白了,循环次数怎么算出来的,不是应该数cs:ip吗

auyhin丶 发表于 2016-11-18 15:35:39

在debug里面的数是16进制。
我们汇编工具是10进制。
工具里加h就是16进制。
加b就是2进制

auyhin丶 发表于 2016-11-18 15:50:47

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

要复制的是指令.而且把指令放到0:200   那么怎么才能复制指令过去呢? 是不是把指令对应的ip里面存放的内容给过去? 或者说把机器码给过去?
页: [1]
查看完整版本: 请教大家一下