计算机组成原理实验 · 2022年2月5日 0

计算机组成原理——双字节BCD码(十进制数)减法

一、实验目的

熟悉8086汇编指令,学会使用星研集成环境软件,掌握汇编语言的设计和调试方法。能看懂程序流程框图,能自己设计程序,熟悉BCD码、补码,了解如何调用系统提供的子程序。

二、实验内容

从键盘上输入4位被减数、减数,实现双字节BCD码(四位数)的减法,结果显示在数码管上;进一步熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、CS段、DS段存贮器的各种方法。

三、程序框图

四、实验步骤

1、连线说明:

D3区:CS、A0、A1——A3区:CS1、A0、A1
D3区:PC0、PC1——F5区:KL1、KL2
D3区 :JP20、B、C——F5区:A、B、C

2、在F5区的键盘上输入4位被减数、减数

3、结果显示在F5区的数码管上

五、程序清单

 .MODELTINY 
EXTRNInitKeyDisplay:NEAR, Display8:NEAR, GetBCDKey:NEAR
EXTRNF1:BYTE  
 .STACK100 
 .DATA  
BUFFERDB8 DUP(?) 
minuendDW1 DUP(?);被减数
subtrahendDW1 DUP(?);减数
 .CODE  
START:MOVAX,@DATA 
 MOVDS,AX 
 MOVES,AX 
 NOP  
 CALLInitKeyDisplay;对键盘、数码管扫描控制器8255初始化
 MOVF1,0;先清除显示,再接收键输入
START1:LEADI,minuend 
 MOVCX,4;按键次数
 CALLGetBCDKey;得到双字节十进制数(被减数)
 MOVF1,1;接收到第一个键,才清除显示
 LEADI,subtrahend 
 MOVCX,4;按键次数
 CALLGetBCDKey;得到双字节十进制数(减数)
 MOVAX,minuend 
 MOVBX,subtrahend 
 MOVDL,10H 
 CMPAX,BX 
 JNBSTART2 
 XCHGAX,BX 
 MOVDL,11H;负数
START2:SUBAL,BL;低位
 DAS  
 XCHGAL,AH 
 SBBAL,BH;高位
 DAS  
 XCHGAL,AH 
 CLD  
 LEADI,BUFFER;存放显示结果
 CALLB1toB2;低位
 MOVAL,AH 
 CALLB1toB2;高位
 MOVAL,10H;最高三位消隐
 STOSB  
 STOSB  
 STOSB  
 STOSB  
 LEASI,BUFFER+3 
 MOVCX,3 
 CALLBlackDisplay;将高位0消隐
 LEASI,BUFFER 
 CALLDisplay8 
 JMPSTART1 
;将一个字节压缩BCD码转换成二个字节非压缩BCD码
B1toB2PROCNEAR 
 PUSHAX 
 ANDAL,0FH 
 STOSB  
 POPAX 
 ANDAL,0F0H 
 RORAL,4 
 STOSB  
 RET  
B1toB2ENDP  
BlackDisplayPROCNEAR;将高位0消隐
BlackDisplay1:MOVAL,[SI] 
 CMPAL,0 
 JNZExit 
 MOVAL,10H 
 MOV[SI],AL 
 DECSI 
 LOOPBlackDisplay1 
Exit:CLD  
 MOV[SI+1],DL 
 RET  
BlackDisplayENDP  
    
 ENDSTART