白云区同和网站建设,wordpress分类页置顶信息,台州手机模板建站,二手车网站建设一、实验目的
了解移位指令的使用方法。 掌握子程序的调用方法#xff0c;了解子程序的入口参数和出口参数。
二、实验内容
将键盘接收的四位十六进制数转换为二进制数#xff0c;并显示在屏幕上。
三、程序清单
CRLF MACRO ;建立宏命令了解子程序的入口参数和出口参数。
二、实验内容
将键盘接收的四位十六进制数转换为二进制数并显示在屏幕上。
三、程序清单
CRLF MACRO ;建立宏命令利用INT中断实现回车换行的功能方便后续直接调用MOV DL,0DHMOV AH,02HINT 21H ;光标移到第一列MOV DL,0AHMOV AH,02HINT 21H ;光标移到下一行
ENDMDATA SEGMENT
MESS DB INPUT HEXNUMBER: $
ERROR DB INPUT ERROR!,0DH,0AH,$
DATA ENDSSTACK SEGMENT STACK ;栈定义
STA DB 32 DUP (?)
TOP DW ?
STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATA ;寄存器和栈初始化MOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AH,09H ;9号功能显示字符串以’$’作为其结束标志MOV DX,OFFSET MESSINT 21H ;调用DOS第21H号中断09H号功能显示请输入的提示信息CALL GETNUM ;调键盘输入数据子程序(数据存在DX中)MOV CX,16 ;循环次数(二进制位数)MOV BX,DX
TTT: ROL BX,01 ;循环左移移位MOV DL,BLAND DL,01H ;屏蔽高 7 位ADD DL,30HMOV AH,02HINT 21H ;显示某位二进制数LOOP TTTMOV AX,4C00HINT 21HGETNUM PROC NEAR ;键盘接收子程序数值存DX中XOR AX,AX
GGG: MOV AH,01H;输入设备(如键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。;该输入还可被重定向如果这样做则无法判断文件是否已到文件尾;AH01H过滤掉控制字符并回显INT 21H ;键盘接收键盘码CMP AL,0DH ;判回车键JZ PPPCMP AL,20H ;判空格键JZ PPPCMP AL,30HJB KKKSUB AL,30HCMP AL,0AH ;判 0 - 9 数字键JB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FH ;判 A - F 字母键JBE GETSCMP AL,2AHJB KKKCMP AL,2FH ;判 a - f 字母键JA KKKSUB AL,20H
GETS: MOV CL,04HSHL DX,CLADD DL,AL ;十六进制数存 DX 中JMP GGG
KKK: PUSH DXMOV AH,09MOV DX,OFFSET ERRORINT 21H ;显示输入错误提示信息POP DX
PPP: PUSH DXCRLFPOP DXRET
GETNUM ENDP
CODE ENDSEND START四、实验过程 1用编辑器建立源文件D101-3.ASM 2用汇编程序MASM.EXE对源文件进行汇编产生目标文件再用连接程序LINK产生可执行文件 3使用调试工具DEBUG进行程序调试 先用U命令反汇编以便了解指令地址。显示结果如下具体调试结果见第五部分。
五、实验结果分析
1程序调试及结果 使用G命令执行到0770:0019处寄存器和栈已经初始化完毕查看数据区内存信息和在屏幕输出的提示信息如下 继续执行进入到键盘输入数据GETNUM子程序中对该子程序进行测试输入空格键此时因为INT 21H中断从而不能单步执行因此直接在DOSBox中运行D101-3.exe程序按下空格键程序直接跳转到标号PPP处将DX压入栈而DX中此时为MESS处地址因此全为0。 同理如果按下“3空格”输出会是什么样显而易见最后2位应为11如下 当然如果输入类似‘.’‘/’等ASCII码值小于30H的字符则会显示输入错误 如果输入除AF、af之外的字母显然这些字母不能够表示十六进制数因此同样会报错 输入正确的四个十六进制数例如“1234H”在GETNUM子程序返回之前断下即使用-G 73命令然后键入1234则可观察到输入内容已经被存入DX寄存器中如下 最后通过16次循环右移从高位到低位依次取出DX中值的每一位比特加上30H转化为01字符后调用21H号中断的2号功能在屏幕上打印出来例如0x1234 0001001000110100B如下图。 至此整个实验完成。
2分析总结
首先本次实验的重点在于了解移位指令的使用方法、掌握子程序调用方法。通常来说移位指令比较简单易懂包括循环移位指令而子程序的入口和出口参数一般通过寄存器来实现入口参数就是在调用子程序之前对该寄存器进行赋值从而达到传参的目的出口参数就是子程序最后返回前用来存放返回结果的寄存器也比较好理解。
而我认为本次实验的核心在于DOS系统21H号中断即字符功能调用类(Character-Oriented Function)09H号功能输出一个字符串到标准输出设备上如果输出操作被重定向那么将无法判断磁盘已满入口参数为AH09HDS:DX待输出字符的地址待显示的字符串以’$’作为其结束标志无出口参数。此外在GETNUM子程序中如何判断输入的字符是回车、空格、数字09、字母af、A~F整个过程相对来说比较复杂其中使用的判断语句和跳转语句较多需要静下心来慢慢梳理程序执行流程。