山东大学汇编语言实验报告3
汇编语言实验报告3 本实验报告的主要目的是掌握十六进制数转换为十进制数的方法和程序,学习和改进两位数加法的程序,理解汇编语言中的 ASSUME 伪指令和标准的汇编程序,掌握 Debug-P/G/T 的关系和区别。 实验要求:将键盘上输入的十六进制数转换成十进制数,并在屏幕上显示。编写程序,详细注释并画程序流程图。 实验流程图: 图 1 十六进制转十进制流程图 实验源代码: 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 码大小 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: ;标号 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 , 该实验报告的主要内容是掌握十六进制数转换为十进制数的方法和程序,学习和改进两位数加法的程序,理解汇编语言中的 ASSUME 伪指令和标准的汇编程序,掌握 Debug-P/G/T 的关系和区别。通过实验,我们可以更好地理解汇编语言的编程和应用。 实验的主要步骤是: 1. 了解十六进制数转换为十进制数的方法和程序。 2. 学习和改进两位数加法的程序。 3. 理解汇编语言中的 ASSUME 伪指令和标准的汇编程序。 4. 掌握 Debug-P/G/T 的关系和区别。 通过实验,我们可以更好地理解汇编语言的编程和应用,并掌握十六进制数转换为十进制数的方法和程序,学习和改进两位数加法的程序,理解汇编语言中的 ASSUME 伪指令和标准的汇编程序,掌握 Debug-P/G/T 的关系和区别。