微机原理课程设计
微机原理课程设计
《微机原理与接口技术》课程设计
院系:
班级:
姓名:
指导教师:
日期:
一设计任务:
编写一汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数和十进制数。(课例027、017、024)
二设计方案
将接收到的数转成16进制数,将这个数保存在一个通用寄存器中(如AX),然后对AX循环做16次SHL,由carry标志寄存器的状态来判断显示0/1。十六位二进制数保存在BX中,对BX中的二进制数循环左移,每次移一位,然后把BL中的二进制数送给AL,再对AL 的前7位进行屏蔽,只留一位原本是最高位的那位二进制数,它要么为1,要么为0。然而把AL中的这位二进制数转换为十进制数,并且输出,由于AL高7位都为0,所以转换位十进制后,然后要么为1,要么为0,并且与那位二进制数相对应。这样循环做16次,就把整个BX中的二进制数都显示出来。
软件VisulASMSetup汇编程序的上机过程是:
1)打开软件建立新文件并把程序粘贴在文件上点击汇编源程序2)下一步然后再点链接目标码
3)然后点调试程序
4)最后点运行程序
三流程图
N
N
开始
初始化循环计数值
BX 循环逻辑左移一个数位
输入一个四位的
十六进制数
>9吗?
转换为十进制
显示二进制数
循环计数器
=0?
结束
1.程序运行结果截图
附录
STACK SEGMENT PARA STACK 'STACK'
DW200DUP(0);初始化堆栈大小为
STACK ENDS
DATE SEGMENT
TRANB DB0DH,0AH,'The transformed binary is:',0DH,0AH,'$'
TRAND DB0DH,0AH,'The transformed demical is:',0DH,0AH,'$'
RESULT DB5DUP(?),'$'
DATE ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATE,SS:STACK
MAIN PROC FAR;主程序入口
MOV AX,DATE
MOV DS,AX
MOV BX,0
MOV CH,4
MOV CL,4
INPUT:SHL BX,CL
MOV AH,01H
INT21H
CMP AL,39H; 大于则转移
JA AF
AND AL,0FH
JMP BINARY
AF:AND AL,0FH
ADD AL,09H
BINARY:OR BL,AL
DEC CH
JNZ INPUT; 转换完成二进制数在BX中
PUSH BX
LEA DX,TRANB
MOV AH,9
INT21H; 显示字符串DISPB:MOV CX,10H; 显示二进制数
DISP:MOV DL,0
ROL BX,1
RCL DL,1
ADD DL,30H
MOV AH,2
INT21H
LOOP DISP
POP BX
MOV CX,5
MOV AX,BX
MOV BX,10
MOV DI,OFFSET RESULT+4 JBY:XOR DX,DX
DIV BX
OR DL,30H
MOV BYTE PTR[DI],DL
DEC DI
LOOP JBY
LEA DX,TRAND
MOV AH,9
INT21H; 显示字符串
MOV DX,OFFSET RESULT
MOV AH,9
INT21H
MOV AH,1
INT21H
MOV AH,4CH;程序结束,返回到操作系统系统INT21H
RET
MAIN ENDP
CODE ENDS
END MAIN