目录
一、实验目的
1、掌握8086CPU系统的逻辑地址和寻址方式;
2、掌握8086CPU系统中机器数的表示方式;
3、掌握指令的机器码表示方法;
4、掌握堆栈的概念和操作过程;
5、掌握集成开发环境下程序设计和调试方法;
6、掌握汇编语言实现具体算法的方式,区分汇编语言与高级语言的编程风格。
二、实验内容
1、实验题目及要求
题目:进行汇编源程序的编辑、编译和链接操作,并完成调试内容,掌握汇编语言程序设计的基本方法和技巧。
(1)源代码:
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,8086H
MOV BX,6800H
MOV SI,8H
MOV DS:[000BH],AX
MOV ES:[6808H],SI
ADD AX,SI
MOV BX,[SI+3]
MOV CX,ES:[BX+SI]
PUSH CX
MOV BX,0
MOV CX,3[BX][SI]
POP DX
L1: JMP L1
CODE ENDS
END START
(2)代码编辑与运行:
(3)运行结果:
入栈:
出栈:
内存查看:
2、实验题目及要求
题目:内存中现有X和Y两个存储单元,分别存有42和-43,利用汇编语言编程计算这两个数之和,并将结果放入SUM存储单元。
(1)源代码
DATA SEGMENT
DA1 DB 42
DA2 DB -43
DA3 DB 00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV BL,DA1
ADD BL,DA2
MOV DA3,BL
(MOV AH,4CH
INT 21H)
CODE ENDS
END START
(2)代码编译与运行
(3)运行结果
3、实验题目及要求
题目:数据段中的一个存储单元X中存放的数据为10H,编程实现将该存储单元中的数据循环左移四位后存放到数据段的另一个存储单元Y中。
(1)源代码
DATA SEGMENT
X DB 10H
Y DB 00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV BL,X
MOV CL,4
ROL BL,CL
MOV Y,BL
CODE ENDS
END START
(2)编译与运行
(3)运行结果
4、第一题单步执行后对应寄存器变化及反编译结果:
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,8086H AX=8086H
MOV BX,6800H BX=6800H
MOV SI,8H SI=8H
MOV DS:[000BH],AX DS内的变化 86 80
MOV ES:[6808H],SI ES寄存器中的变化 0F7C:6808 0800
ADD AX,SI AX=808EH
MOV BX,[SI+3] BX=8086H
MOV CX,ES:[BX+SI] CX=F6620H
PUSH CX 栈内变化0FE6:FFFC 20 66 FF FF
MOV BX,0 BX=0
MOV CX,3[BX][SI] CX=F8086H
POP DX 栈内变化 0FE6:FFFE FF FF
L1: JMP L1
反编译结果:
0000FE60: MOV AX, 0X8086 ; B88680
0000FE63: MOV BX, 0X6800 ; BB0068
0000FE66: MOV SI, 0X8 ; BE0800
0000FE69: MOV [DS:0XB], AX ; A30B00
0000FE6C: ES MOV WORD PTR [ES:0X6808], SI ; 2689360868
0000FE71: ADD AX, SI ; 03C6
0000FE73: MOV BX, WORD PTR DS:[SI+0X3] ; 8B5C03
0000FE76: ES MOV CX, WORD PTR ES:[BX+SI] ; 268B08
0000FE79: PUSH CX ; 51
0000FE7A: MOV BX, 0X0 ; BB0000
0000FE7D: MOV CX, WORD PTR DS:[BX+SI+0X3] ; 8B4803
0000FE80: POP DX ; 5A
0000FE81: JMP 0XFE81 ; EBFE
0000FE83: JBE 0XFE7F ; 76FA
0000FE85: CALL 0X8B8 ; E8300A
0000FE88: POP BX ; 5B
5、流程图
实验一:
实验二: