微机实验53097
验 实验 1 汇编程序的编写与调试实验 一、实验目的 1.熟练掌握 EMU8086 的编写程序,学会用 EMU8086 调试程序。
2.深入了解数据在存储器中的存取办法,及堆栈中数据的压入和弹出。
3.掌握各种寻址办法以及简单指令的执行过程。
二、实验内容 1.设堆栈指针 SP=2000H,AX=300H,BX=5000H 1)编写程序段完成源程序,实现用堆栈操作指令,将 AX 的内容和 BX 的内容进行交换 2)编译源程序 3)用单步执行来调试可程序,并记录以下内容。
(1)记录 SP 变化(2)SP 所指向堆栈单元内容变化(3)AX,BX 的变化 CODE SEGMENT ASSUME CS:CODE,SS:STACK START: MOV SP,2000H MOV AX,300H MOV BX,5000H PUSH AX;AX=_______H, SP=_______ H ,WORD PTR[0710:_____]=________H PUSH BX;AX=_______H, SP=_______ H ,WORD PTR[0710:______]=________H POP AX;AX=_______H, SP=_______ H POP BX;AX=_______H, SP=_______ H MOV AH,4CH INT 21H CODE ENDS END START 2.设 DS=当前段地址,BX=0000H,SI=0002H,存储器偏移地址 000H—005H 连续单元顺序装入 0AH,0BH,0CH,0DH,0EH,0FH。
1)完成源程序 2)编译源程序 3)用单步执行来调试程序,并记录以下内容。
(1)记录 DA1 的逻辑地址(2)分析每条指令源地址的形成过程,即源操作数有效地址,并前往存储单元查看源操作数的值。
(3)当条数据传送完毕时,AX 中的内容是什么? 程序清单如下:
DATA SEGMENT DB 0AH,0BH,0CH,0DH,0EH,0FH DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,0002 MOV BX,0000H MOV AX,BX MOV AX,0004H 源操作数是________ MOV AX,[0004H] 源操作数是________, 有效地址为________,AX=______ MOV AX,[BX] 源操作数是________, 有效地址为_________,AX=______ MOV AX,0001[BX] 源操作数是________, 有效地址为________,AX=______ MOV AX,[BX][SI] 源操作数是________, 有效地址为_________,AX=______ MOV AX,0001[BX][SI] 源操作数是______, 有效地址为_______,AX=______ HLT CODE ENDS END START 3.利用 EMU8086 编辑下列程序的源程序文件。该程序经过汇编后会产生语法错误,请先排除错误,再连接运行。在调试过程中解决逻辑错误,直到程序能正确运行。
本程序用于输入三个字符,并且依次存入内存中。理解程序分析执行 INC AL 后,AL的值为多少。试找出输入字符卫浴内存什么地方。即支出 BUF 内存逻辑地址以及物理地址是多少。
DATA SEGMENT BUF DB 256 DUP(?)DATA END CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BX,BUF MOV CX,3 L1 MOV AH,9 INT 21H INC AL;问每次运行完此语句,AL=? MOV BX,AL INC BX LOOP L1 MOV AH,4CH INT 21H CODE END END START 4.设 AX=0002H,编一个程序段将 AX 的内容乘以 10,要求用移位的方法完成。
程序框图如下:
开始
AX,BX 装入操作数 2 AX 左移两位→AX AX+BX→AX AX 左移一位→AX 结束
实验 2 两个多位十进制数相加的实验 一、实验目的 1.学习数据传送和算术运算指令的用法。
2.熟悉在 PC 机上建立、汇编、连接、调试和运行 8088 汇编语言程序的过程。
二、实验内容 将两个多位十进制数相加,要求被加数均以 ASCII 码形式各自顺序存放在以 DATA1 和DATA2 为首的 5 个内存单元中(低位在前),结果送回 DATA1 处。附加题要求将加法过程显示与屏幕。
同学可以自己设计程序也可对代码段进行填空以及问答来完成程序。
(附加题范例在第二页);该程序完成54321+54321=108642的多位十进制加法运算,和存放与DAT3 DATA SEGMENT DAT1 DB "12345";问一个多位十进制数各位是以何种顺序存放于内存的。
DAT2 DB "12345";个位存放于高地址或者为低地址。
DAT3 DB 6 DUP(0)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,DAT1 LEA SI,DAT2 LEA DI,DAT3 MOV CX,5 CLC;为什么要加入这条指令 L1: MOV AL[BX] ADC AL,[SI];BYTE PTR[BX]+[SI]+CFAL 例‘1’+‘1’+0= 62HAL __________;填空________________;AL=02H PUSHF;为什么要加入pushf popf这两条指令 OR AL,30H;为什么要加入这条指令 POPF MOV [DI],AL __________;填空________ __________;填空________ __________;填空________ LOOP L1 JNC L2 MOV [DI],31H INC DI hlt CODE ENDS END START 三、程序框图(见下页))显示被加数和加数 被加数和加数以 ASCII 码表示的数字串形式转化为由十六进制表示的数字串形式 计数值 5 送 CX 清除最低位进位 执行 ADC 带进位相加
AAA 调整 结果送被加数区 调整偏移量 N CX-1=0? Y 十六进制的结果转化为 ASCII 码表示的数字串 显示结果 结束 附加题;该程序完成54321+54321=108642的多位十进制加法运算,和存放与DAT3并显示于屏幕
