没有合适的资源?快使用搜索试试~ 我知道了~
山东大学汇编语言实验报告3
资源推荐
资源详情
资源评论
信息科学与工程学院
2023-2024 学年第一学期
实 验 报 告
课程名称: 微处理器原理与应用
实验名称: 子程序汇编实验学习和提高
山东大学·微处理器原理与应用·实验报告
- 1 -
实验报告
【实验目的】
1.掌握将十六进制数转换为十进制数的方法和程序;
2.学习和改进两位数加法的程序;
3.理解汇编语言中的 ASSUME 伪指令和标准的汇编程序;
4.掌握 Debug-P/G/T 的关系和区别。
【第一个实验】
【实验要求】
将键盘上输入的十六进制数转换成十进制数,并在屏幕上显示。
编写程序,详细注释并画程序流程图。
【实验具体内容】
(1)实验流程图:
图 1 十六进制转十进制流程图
山东大学·微处理器原理与应用·实验报告
- 2 -
(2)实验源代码:
DATAS SEGMENT ;定义数据段
STR1 DB 'Please enter a hexadecimal number',10,'$';定义提示字符串
STR2 DB 10,'Recognition error, please re-enter',10,'$';定义错误提示字符串
DATAS ENDS;数据段结束标志
STACKS SEGMENT STACK;定义栈段
DW 8 DUP(?) ;保留 8 个字变量的位置
STACKS ENDS;栈段结束标志
CODES SEGMENT;定义代码段
ASSUME CS:CODES,DS:DATAS,SS:STACKS;使用伪指令使各寄存器与各段对应
START: ;开始标志
MOV AX,DATAS;将数据段的地址赋给 DS
MOV DS,AX ;将数据段的地址赋给 DS
MOV AX,STACKS;将栈的段地址赋给 SS
MOV SS,AX ;将栈的段地址赋给 SS
MOV SP,20H ;指定栈顶
LEA DX,STR1 ;利用 LEA 直接将 STR1 的内容赋值到 DX 中
MOV AH,9H ;调用 INT 21H 的 9H 功能
INT 21H ;输出提示字符串
MOV BX,0 ;将 0 赋值到 BX 中
INPUT:;标号
MOV AH,1H;调用 INT 21H 的 1H 功能
INT 21H ;从键盘上输入一个字符,将其 ASCII 码送入 AL 中,屏幕上显示该字符
ADD DX,1 ;输入数字
CMP AL,0DH;将 AL 中值与 0DH(CR 的 ASCII 码)作比较
JE HH ;若判断结果相等即回车则跳转至 HH
JUDGE: ;标号
CMP AL,'f' ;比较输入的字符和 f 的 ASCII 码大小
JA ERROR ;无符号大于则跳转至 ERROR
CMP AL,'a';比较输入的字符和 a 的 ASCII 码大小
山东大学·微处理器原理与应用·实验报告
- 3 -
JNB SIT1 ;无符号不小于则跳转至 SIT1
CMP AL,'F' ;比较输入的字符和 F 的 ASCII 码大小
JA ERROR ;无符号大于则跳转至 ERROR
CMP AL,'A';比较输入的字符和 A 的 ASCII 码大小
JNB SIT2 ;无符号不小于则跳转至 SIT2
CMP AL,'9' ;比较输入的字符和 9 的 ASCII 码大小
JA ERROR ;无符号大于则跳转至 ERROR
CMP AL,'0';比较输入的字符和 0 的 ASCII 码大小
JNB SIT3 ;无符号不小于则跳转至 SIT3
JMP ERROR ;跳转至 ERROR 处
SIT1: ;标号
SUB AL,57H ;若位于 a 到 f 之间,则 AL-57H
JMP TRA ;无条件跳转至 TRA
SIT2: ;标号
SUB AL,37H ;若位于 A-F 之间,则 AL-37H
JMP TRA ;无条件跳转至 TRA
SIT3: ;标号
SUB AL,30H ;若为 0—9,则 AL-30H
JMP TRA ;无条件跳转至 TRA
TRA: ;标号
ADD DX,1 ;指示输入字符数
MOV AH,0H ;将 AH 置零
JE INPUT ;DX=0 即用户输入为空时跳转
MOV CX,4H ;将循环次数设置为 4,处理四个十六进制位
S: ROL BX,1 ;将 BX 左移四位
LOOP S ;循环执行
ADD BX,AX ;将输入存到 BX 中
JMP INPUT ;跳转至输入阶段
HH: ;标号
山东大学·微处理器原理与应用·实验报告
- 4 -
MOV AX,BX ;将 bx 的值赋给 ax
MOV BX,10 ;设置除数为 16 位,用于解决四位十六进制数字
MOV CX,0 ;将 CX 设置为 0
CIR: ;标号
MOV DX,0 ;清零便于存储余数
ADD CX,1 ;为输出时循环结束做准备,CX 为循环次数
DIV BX ;AX 中的数字除以 16,AX 存储商数,DX 中存储余数
PUSH DX ;之后将余数入栈
CMP AX,0 ;直到商为 0 时结束循环
JNE CIR;如果商不为 0 则继续循环
NEXT: ;标号
POP AX ;将余数出栈保存到 AX 中
MOV DL,AL ;转入 DL 准备输出
ADD DL,30H ;余数位于 1 到 9 之间,因此需要将 DL+30H 转化为对应 ASCII 码
MOV AH,2;调用 INT 21H 的 2 号功能
INT 21H ;输出该十进制数字
LOOP NEXT ;根据 CX 中的值进行循环输出的操作
JMP STOP ;无条件跳转至 STOP
ERROR: ;错误情况处理
LEA DX,STR2 ;获取 STR2 至 DX 中
MOV AH,9H;调用 INT 21H 的 9H 功能
INT 21H ;输出该提示语句
JMP INPUT ;跳转至输入
STOP: ;标号
MOV AH,4CH;调用 INT 21H 的 4CH 功能
INT 21H;带返回码结束
CODES ENDS;代码段结束
END START;结束标志
剩余24页未读,继续阅读
资源评论
Jaspin.
- 粉丝: 10
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功