内容发布更新时间 : 2024/11/15 22:34:25星期一 下面是文章的全部内容请认真阅读。
实验1 DEBUG命令及汇编指令和寻址的应用
一、实验目的和要求
1、掌握DEBUG的基本命令及其功能,学会用DEBUG调试程序; 2、掌握8086CPU指令的功能,体会寄存器的作用;
3、了解数据在指令中的存放方式和内存操作数的几种寻址方式; 4、了解指令的执行过程。 二、实验内容
1、设堆栈指针SP=1000H,AX=4000H,BX=8000H;请编一程序段将AX和BX的内 容进行交换。要求:用3种方法实现。
答:方法一 CODE SEGMENT ASSUME CS:CODE START: MOV AX,4000H MOV BX,8000H MOV CX,AX MOV AX,BX MOV BX,CX CODE ENDS END START 方法二 CODE SEGMENT ASSUME CS:CODE START: MOV AX,4000H MOV BX,8000H XCHG AX,BX CODE ENDS END START
方法三CODE SEGMENT
ASSUME CS:CODE START: MOV AX,4000H MOV BX,8000H PUSH AX PUSH BX POP AX POP BX CODE ENDS END START
2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。
MOV BX,1000H 立即寻址,将1000H送给BX MOV AX,BX 寄存器寻址,将BX内容送AX
MOV AX,[BX] 寄存器间接寻址,将DS:BX内存单元内容送AX MOV AX,20[BX] 寄存器相对寻址,将DS:BX+20内存单元内容送AX
当时DS数据段的值0B47H,每条指令执行后AX的值分别为4000H,1000H,1AEBH, BB00H。将指令中“bx”修改为dx执行指令,结果:AX值BB00H,1000H,错误, 错误。错误的原因是DX不为基址寄存器。 3、已知有如下程序段:
MOV AX,3421H MOV CL,4
在以上程序段的基础上,分别执行以下指令:起始时刻 CF=0,ZF=0,SF=0
CF SF ZF
ROL AX,CL AX=4213H 1 0 0 ROR AX,CL AX=1342H 0 0 0 SHL AX,CL AX=4210H 1 0 0 SHR AX,CL AX=0342H 0 0 0 SAR AX,CL AX=0342H 0 0 0 RCL AX,CL AX=4211H 1 0 0
RCR AX,CL AX=2342H 0 0 0 4.设有以下部分程序段实验
TABLE DW 10H,20H,30H,40H,50H
ENTRY DW 4 …
LEA BX,TABLE ADD BX,ENTRY MOV AX,[BX] …
要求:1、要求将以上程序补充成为一个完整的汇编程序。
2、在1的基础上编辑、调试并运行程序,记录在执行MOV AX,[BX]后AX的内容。
答:DATA SEGMENT
TABLE DW 10H,20H,30H,40H,50H ENTRY DW 4 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,TABLE ADD BX,ENTRY MOV AX,[BX]
MOV AH,4CH INT 21H CODE ENDS
END START 实验截图:
编译成功
连接成功,生成exe文件。
BX开始代表偏移量,即指向数组的第一个字节,在加上ENTRY,即加上4以后,[BX]即代