1、昆明理工大学 汇编实验报告信息工程及自动化学院汇编语言试验报告 试验环境: OS : windows 7 ultimate X64 Tool : DOSBOX0.74目录试验一 2(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。 2(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。 9(3)查看内存中的内容 11(4)向内存从B8100H开始的单元中填写数据,如: 11试验二 12使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。 12观察下图得出结论 15附录:
2、16 试验一(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。程序机器码 汇编指令 b8 20 4e mov ax,4E20H 05 16 14 add ax,1416H bb 00 20 mov bx,2000H 01 d8 add ax,bx 89 c3 mov bx,ax 01 d8 add ax,bx b8 1a 00 mov ax,001AH bb 26 00 mov bx,0026H 00 d8 add al,bl 00 dc add ah,bl 00 c7 add bh,al b4 00 mov ah,0 00 d8 ad
3、d al,bl 04 9c add al,9CH 运行前一次值: 1) 4E20Hax CS:IP 0123:0000 2) 1416H+axax CS:IP 0123:00033) 2000Hbx CS:IP 0123:00064) bx+axax CS:IP 0123:00095) axbx CS:IP 0123:000B6) bx+axax CS:IP 0123:000D7) 001AHax CS:IP 0123:000F8) 0021Hbx CS:IP 0123:00129) al+blal (al=1AH,bl=21H) CS:IP 0123:001510) ah+blah (ah=
4、00H,bl=21H) CS:IP 0123:001711) bh+albh (bh=00H,al=3BH) CS:IP 0123:001912) 0ah CS:IP 0123:001B13) al+blal (al=3BH,bl=21H) CS:IP 0123:001D14) al+9CHal CS:IP 0123:001F CS:IP 0123:0021配图如下: 图1.1-1图1.1-1:dosbox v0.74 对虚拟硬盘的挂载图1.1-2图1.1-2:因为我们进入demo文件夹对于可执行程序来说文件夹在其下层,所以我们配置环境变量.为了方便我们调整cs为0123调整开始ip为0000
5、;图1.1-3图1.1-3:用e编写程序.图1.1-4图1.1-4:总的编写展示.对于其间我们省略了一步截图.是对于再次读写位置的确定.我们根据程序定点为0123:0015;图1.1-5图1.1-5:单步执行不再赘述.图1.1-6图1.1-7图1.1-8图1.1-9图1.1-9:采用a编写程序.指定开始位置.图1.1-10图1.1-11图1.1-12图1.1-13(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。程序mov ax,1add ax,axjmp 2000:0003图1.2-1图1.2-2图1.2-3 第一条指令给ax赋值。第二条指令让ax相加,相
6、当于乘2。第三条跳转上一条指令连续跳转8八次,就是2的八次方(3)查看内存中的内容PC机主板上的ROM中写有一个生产日期,在内存FFF00HFFFFFH的某几个单元中,请找到这个生产日期并试图改变它。图1.3-1 因为物理地址=段地址*16+段内地址内存FFF00HFFFFFH在计算机FFFF:0000FFF0:000F中运用d FFFF:0000指令查看内存的地址改不了.(4)向内存从B8100H开始的单元中填写数据,如: -e B810:0000 01 01 02 02 03 03 04 04 此试验我参看了多方资料.最后得出结论在b800以后几个内存空间是显存位置.对于编写程序用E读写开
7、始第一位是设置字符,后一位是颜色.我们通过颜色表对比得出选择的颜色. 又知道在一页显示缓冲区中: 偏移00009F对应显示器上的第1行(80个字符占160个字节): 偏移0A013F对应显示器上的第2行: 偏移1401DF对应显示器上的第3行。所以很好确定我们显示的位置.具体资料见附录.图1.4-1试验二使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。mov ax,ffffmov ds,axmov ax,2200mov ss,axmov sp,0100mov ax,0 ax=_C0EA_add ax,2 ax=_0000_mov bx,4 bx=_30F0_
8、add bx,6 bx=_6021_push ax sp=_00FE_;修改的内存单元地址是 _2200:00FE_ 内容为_push bx sp=_00FC_, 修改的内存单元地址是 _2200:00FC_ 内容 _pop ax sp=_00FE_,ax=_6021_pop bx sp=_0100_,bx=_C0FC_push 4 sp=_00FE_修改的内存单元地址是 _2200:00FE _ 内容 _30F0_push 6 sp=_00FC_修改的内存单元地址是 _2200:00FC _ 内容 _2F31_图2.1-1图2.1-2图2.1-3图2.1-4图2.1-5观察下图得出结论 因为用T指令进行调试时,会产生中断。而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。 附录:1.背景色显示表前一位数字表示背景色,后一个字母则为前景。每个数字可以为以下任何值之一:0 = 黑色 1 = 蓝色 2 = 绿色 3 = 湖蓝色 4 = 红色 5 = 紫色 6 = 黄色7 = 白色 8 = 灰色 9 = 淡蓝色 A = 淡绿色 B = 淡浅绿色 C = 淡红色 D = 淡紫色 E = 淡黄色 F = 亮白色2.ascll码表由于内容过多不再赘述.= End =