汇编语言第一次实验
实验任务2

8086CPU的C0000~FFFFF 地址空间为只读存储器,无法被修改。
实验任务3
使用e命令,向内存单元填写数据:
-e b800:0 03 04 03 04 03 04 03 04 03 04

使用f命令,向内存单元批量填写数据:
-f b800:0f00 0f9f 03 04






实验任务4
填空:
1 -a 2 mov ax, 20 3 mov ds, ax 4 mov ss, ax 5 mov sp, 30 6 push [0] ; 执行后,寄存器(sp) = 002EH 7 push [2] ; 执行后,寄存器(sp) = 002CH 8 push [4] ; 执行后,寄存器(sp) = 002AH 9 push [6] ; 执行后,寄存器(sp) = 0028H 10 pop [6] ; 执行后,寄存器(sp) = 002AH 11 pop [4] ; 执行后,寄存器(sp) = 002CH 12 pop [2] ; 执行后,寄存器(sp) = 002EH 13 pop [0] ; 执行后,寄存器(sp) = 0030H
问题1:栈顶的逻辑地址为20:30,物理地址为0230H
问题2:

问题3:

问题4:

实验任务5
问题1:单步执行mov ss,ax后并没有暂停。由于此指令修改了段寄存器,之后的一条指令mov sp,30也紧随着执行了。
问题2:实际栈空间的使用并非简单的依次压入数据。并且进行某些操作后,栈中会存放当前指令的段地址和偏移地址。
实验任务6
实验源码:

汇编及链接:

执行结果:

查看程序段前缀:

验证得程序段前缀前两个字节是CD 20。且程序段前缀中存储了程序名。
实验任务7
1 assume cs:code 2 code segment 3 mov ax, cs 4 mov ds, ax 5 mov ax, 0020h 6 mov es, ax 7 mov bx, 0 8 mov cx, 23 9 s: mov al, [bx] 10 mov es:[bx], al 11 inc bx 12 loop s 13 14 mov ax, 4c00h 15 int 21h 16 code ends 17 end
程序将要完成的功能是复制部分自身代码至内存0:200开始的连续内存单元。代码实现的功能是将内存单元ds:[bx]处开始的数据复制至内存单元es:[bx]处。因此第一空填cs,将程序段首地址信息送入段寄存器ds中;第二空的数字即复制字节的循环次数,使用debug调试程序知被复制代码的长度为23字节,因此填23。
用g命令运行部分代码和使用u命令反汇编0:200处内存空间数据:

发现程序确实被复制到了0:200处的内存空间。

浙公网安备 33010602011771号