汇编实验4 [bx]和loop的使用

实验内容

1.实验1

  • 源代码:
 1 assume cs:code
 2 code segment
 3     mov ax,0b800h
 4     mov ds,ax
 5     mov ax,0403h
 6     mov bx,07b8h
 7 
 8     mov cx,10h
 9 s:  mov [bx],ax
10     inc bx
11     inc bx
12     loop s
13 
14     mov ax,4c00h
15     int  21h
16 code ends
17 end
  • 按要求将0403H修改为0441H

  经汇编连接运行可得:

2.实验2

源代码:

 1 assume cs:code
 2 code segment
 3     mov ax,0
 4     mov ds,ax
 5     mov bx,0200h
 6     mov ax,0
 7     mov cx,40h
 8 s:  mov [bx],ax
 9     inc ax
10     inc bx
11     loop s
12     mov ax,4c00h
13     int 21h
14 code ends
15 end
  • 用debug进行调试

  • 使用d命令查看是否修改成功

 成功!nice!

 3.实验3

补全代码,实现将“mov ax,4c00h”前的指令复制到内存0:200处。

老实说,刚看到题目的时候还是有点懵的,因为之前都是对数据进行操作,但是怎样复制指令呢???

于是乎,就随便填了点内容,想着就先试试看看

 1 assume cs:code
 2 code segement
 3     mov ax,00h
 4     mov ds,ax          
 5     mov ax,0020h
 6     mov es,ax
 7     mov bx,0
 8     mov cx,10h
 9     
10 s:  mov al,[bx]
11     mov es:[bx],al
12     inc bx
13     loop s
14     
15     mov ax,4c00h
16     int 21h
17 code ends
18 end

刚用u查看了一下命令,就意识到自己的学的是多么烂,竟然会忘了机器是如何存储指令的,也忘了指令同时也是数据,只是存放的寄存器不同。

所以,我也马上就意识到,需要复制的指令不过是放存放在073A:0000到0016中的数据,想到这,自然就简单了,指令存放在段寄存器cs中

 1 assume cs:code
 2 code segment
 3     mov ax,cs
 4     mov ds,ax
 5     
 6     mov ax,0020h
 7     mov es,ax
 8     
 9     mov bx,0
10     mov cx,17h
11     
12 s:  mov al,[bx]
13     mov es:[bx],al
14     inc bx
15     loop s
16     
17     mov ax,4c00h
18     int 21h
19 code ends
20 end

先用u命令查看指令:

在用g命令执行:

执行完毕查看0:200后的内存单元:

emmm......

这样虽然看的出,但看着很不舒服,不过,我突然想到,既然是指令,何不用u命令查看看呢

完成。

  • 复制的是存放在cs:ip中的“数据”,即指令,从076A:0000到076A:0016
  • 有17H个字节,值得一提的是,我并不是直接输入17H的,而是之前尝试了其他的值,然后用u命令查看的出的(本觉得那一部分没必要写,没想到还问了。。。。)

总结与体会

实验2中用栈来实现那一部分我并未完成,并不是我学习汇编的热情没了,而是我确实没想出来,虽然我也可以偷偷借鉴一下别人的博客来补全,但总感觉那没啥意思。就想着先把基础的,我能够理解的部分弄熟一点,再进阶吧,虽然已经是第十二周了。。。看来课后得多花点时间了

posted @ 2018-11-21 21:35  鎖夢  阅读(370)  评论(2编辑  收藏  举报