任务一:
(1)对源程序 ex5_1.asm 进行汇编、连接、运行;
(2)利用debug来对源程序进行调试 用u命令对其进行反汇编 根据反汇编得到的结果,用g命令执行到程序返回前,即执行到001D之前;
可知程序返回前:
cs=076C;ss=076B; es=076A;
ax的中已经传入data值 现查看
3)设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1;
任务二:
1)对程序进行编译连接;
2)运用debug工具查看段中数据;
CS=076C;SS=076B;DS=076A;
(3)设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1;
(4)该段实际占有的空间为:(N/15+16)*16;
实验三:
1)对程序进行编译连接;
2)运用debug工具查看段中数据;
3)CPU执行程序,程序返回前,data段中的数据不变,CPU执行程序,程序返回前,cs=076A,ss=076E,ds=076D。
4)设程序加载后,code段的段地址为X,则data段的段地址为X+2,stack段的段地址为X+4;
实验四:经过实际操作后发现,仅ex5-3.exe能够正常运行;
“end start” 指明程序入口,被转化为一个入口地址,储存在可执行文件的描述信息中,从而cpu能从我们希望的地址处开始执行。
缺少导致找不到程序入口。
实验五:
1)源代码;
1 assume cs:code 2 a segment 3 db 1,2,3,4,5,6,7,8 4 a ends 5 6 b segment 7 db 1,2,3,4,5,6,7,8 8 b ends 9 10 c segment 11 db 8 dup(0) 12 c ends 13 code segment 14 start: 15 mov bx,0 16 mov dx,0 17 mov cx,8 18 s:mov dx,0 19 mov ax,a 20 mov ds,ax 21 add dl,[bx] 22 mov ax,b 23 mov ds,ax 24 add dl,[bx] 25 mov ax,c 26 mov ds,ax 27 mov [bx],dl 28 inc bx 29 loop s 30 mov ax,4c00h 31 int 21h 32 33 code ends 34 end start
2)使用t命令单步调试至mov [bx],dl命令 ,此时上一条命令mov ds,ax已经执行完毕,此时ds中保存的就是c段的段地址
查看此时未加载完毕前c段中内容
运行到程序返回前,此时的DS中保留的就是c段的段地址,查看c段中的数据;
通过该结果可知完成相加;
任务六:
1 assume cs:code 2 a segment 3 dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh 4 a ends 5 6 b segment 7 dw 8 dup(0) 8 b ends 9 10 code segment 11 start: 12 mov ax,a 13 mov ds,ax 14 mov ax,b 15 mov ss,ax 16 mov sp,0fh 17 mov bx,0 18 mov cx,8 19 s:push [bx] 20 inc bx 21 inc bx 22 loop s 23 mov ax,4c00h 24 int 21h 25 26 code ends 27 end start
将栈顶完成初始化;
执行push操作前,b段中位置;
程序返回前,查看b段中数据(ss保存的数据);
数据在b段得到了逆置;