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