汇编语言(第2版)王爽著 课后实验报告详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言实验报告

班级学号 学生姓名 提交日期

成 绩

实验1-1如下:

用E命令将指令写入内存:

用A命令将指令写入内存:

实验1-2代码如下:

用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。如图:

实验1-3:

用D命令输入内存fff0h~fffffh,则可看到:

生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有:

在window7下虚拟的dos中可以改,但如果重新打开dos中的debug 则日期任然不会改变,因为那是ROM。

实验1-4代码如下:

内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII 码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节

实验2-1:(按实验结果填空)

Mov ax,ffff

Mov ds,ax

Mov ax,2200

Mov ss,ax

Mov sp,0100

Mov ax,[0] ;ax=5BEA

Add ax,[2] ;ax=5CCA

Mov bx,[4] ;bx=30F0

Add bx,[6] ;bx=6026

Push ax ;sp=00FE; 修改的内存单元的地址是2200:00FE 内容是5CCA Push bx ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是6026 Pop ax ;sp=00FE; ax=6026.

Pop bx ;sp=0100; bx=.5CCA

Push [4] ;sp=00FE; 修改的内存单元的地址是2200:00FE内容是30F0 Push [6] ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是2F36 实验截图如下:

实验2-2(分析问答实验)

答:因为T命令是单步中断,我们在后面学习后知道,CPU执行中断时会保留现场,即将标志寄存器,CS,IP等入栈,而实验中栈的地址正好是要查询的内存地址,所以即便未对内存单元进行写入命令,但里面的值会因为CPU要保留现场自动被改了

实验3

(1)代码:

ASSUME CS:CODES CODES SEGMENT START:

mov ax,2000h

mov ss,ax

mov sp,0

add sp,10

pop ax

pop bx

push ax

push bx

pop ax

pop bx

MOV AH,4CH

INT 21H

CODES ENDS

END START (2)debug跟踪:

(3)用debug跟踪查看PSP中的内容:

可见PSP的头两个字节是CD 20,与书上的一致实验4-1代码如下:

ASSUME CS:CODES

CODES SEGMENT

START:

mov ax,0

mov ds,ax

mov bx,200h

mov cx,64

s: mov [bx],al

inc al

inc bx

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验4-1运行图如下:

实验4-2代码如下:

ASSUME CS:CODES

CODES SEGMENT

START:

mov ax,200h

mov ds,ax

mov bx,0

mov cx,64

s: mov [bx],bx

inc bx

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果同实验4-1的一样实验4-3(补全代码)

ASSUME CS:CODES

CODES SEGMENT

START:

mov ax,cs

mov ds,ax

mov ax,20h

mov es,ax

mov bx,0

mov cx,16h

s: mov al,[bx]

mov es:[bx],al

inc bx

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

因为要将代码复制到0:200处,则必须知道代码的地址,和代码的长度,代码的地址在cs和IP中,代码的长度可以编译后用U命令查看后确定,这个之前随便打一个数就可以,不影响代码的长度,因为那个数占的空间和真实的长度一样,所以用U命令后在改过来即可实验4-3的运行图如下:

实验5-1代码如下:

DA TAS SEGMENT

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

DA TAS ENDS

STACKS SEGMENT

dw 0,0,0,0,0,0,0,0

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DA TAS,SS:STACKS

START:

MOV AX,stacks

MOV ss,AX

mov sp,16

mov ax,datas

mov ds,ax

push ds:[0]

相关文档
最新文档