【数制转换与数值运算编程】—— 微机原理实验

一、实验要求

  1. 将 ASCII 码表示的十进制数转换为二进制数。
    十进制表示为:Dn × 10n + Dn-1 × 10n-1 + … + D0 × 100 = ∑ i = 0 n \sum_{i=0}^n i=0n Di × 10i
    Di代表十进制数0,1,2,…,9;
    上式转换为: ∑ i = 0 n \sum_{i=0}^n i=0n Di × 10i = (…((Dn × 10 + Dn-1) × 10 + Dn-2) × 10 + … + D1) × 10 + D0 (*)
    由式 * 可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数的结果。
    在这里插入图片描述
  2. BCD 码转换为二进制数。
    将四个二位十进制数的 BCD 码存放于 3500H 起始的内存单元中,将转换的二进制数存入 3510H 起始的内存单元中,自行绘制流程图并编写程序。
  3. 两个非压缩 BCD 数加法程序。
    要求:被加数和加数均为 4 位数,从键盘输入,分别放在 SBCD1 和 SBCD2 开始的地址单元中。运算结果放在 SSUM 开始的地址单元中。并在虚拟终端上以“SBCD1+SBCD2=SSUM”格式进行显示。
  4. 从键盘上输入任意两个不大于 2 位数的正整数,计算其乘积。结果在屏幕上显示。

二、实验目的

  1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解。
  2. 熟悉在EMU8086集成环境中程序调试的方法。
  3. 掌握使用运算类指令编程及调试方法。
  4. 掌握运算类指令对各状态标志位的影响及其测试方法。
  5. 学习使用软件监视变量的方法。

三、实验代码及实验结果

  1. 实验流程图:
    在这里插入图片描述

实验代码:

DATA        SEGMENT
INDEX       DB  30H,30H,32H,35H,36H
DATA        ENDS
 
CODE        SEGMENT
    ASSUME CS:CODE, DS:DATA
START:    
    MOV AX, DATA
    MOV DS, AX
    MOV SI, OFFSET INDEX
    MOV CX,5
FOR1:
    MOV AL,[SI]
    SUB AL,30H
    MOV [SI],AL
    INC SI
LOOP FOR1
    MOV AX,0000h
    MOV BX,0000h
    LEA SI,INDEX

    MOV DX,10000
    MOV AL,[SI]
    IMUL DX
    MOV BX,AX
   
    MOV DX,1000
    INC SI
    MOV AL,[SI]
    IMUL DX
    ADD BX,AX
    
    MOV DX,100
    INC SI
    MOV AL,[SI]
    IMUL DX
    ADD BX,AX
    
    MOV DX,10
    INC SI
    MOV AL,[SI]
    IMUL DX
    ADD BX,AX
 
    INC SI
    MOV AL,[SI]
    ADD BX,AX
    MOV AX,BX
     
CODE  ENDS
END START

实验结果:

在这里插入图片描述
2.

实验代码:

CODE SEGMENT 
    ASSUME CS:CODE
START:
    MOV SI,3500H
    MOV [SI],01
    MOV [SI+1],02
    MOV [SI+2],03
    MOV [SI+3],04
    MOV [SI+4],05
    MOV [SI+5],06
    MOV [SI+6],07
    MOV [SI+7],08
    MOV CX,4
    MOV DI,3510H
    MOV AX,0000H
    MOV BX,000AH
    MOV DX,0000H
FOR:
    MOV AL,DS:[SI]
    IMUL BL
    MOV DX,DS:[SI+1]
    AND DX,00FFH
    ADC AX,DX
    MOV DS:[DI],AL
    ADD SI,2
    INC DI
LOOP FOR
    MOV AX, 4C00H
    INT 21H    
CODE ENDS
END START

实验结果:

在这里插入图片描述
3. 实验流程图:
在这里插入图片描述

实验代码:

DATA SEGMENT
    STRI1 DB 5 DUP(0) 
    STRI2 DB 5 DUP(0)
    ADDC DB '+'
    EQUAL DB '=' 
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,ES:DATA 
START PROC FAR
    PUSH DS 
    MOV AX,0
    PUSH AX
    MOV AX,DATA
    MOV DS,AX
    MOV AH,1H 
    INT 21H
    SUB AL,30H
    MOV STRI1+3,AL
    MOV AH,1H
    INT 21H
    SUB AL,30H
    MOV STRI1+2,AL
    MOV AH,1H
    INT 21H
    SUB AL,30H
    MOV STRI1+1,AL
    MOV AH,1H
    INT 21H
    SUB AL,30H
    MOV STRI1,AL
    MOV DL,0AH
    MOV AH,2H
    INT 21H
    MOV DL,0DH
    MOV AH,2H
    INT 21H
    MOV AH,1H
    INT 21H
    SUB AL,30H
    MOV STRI2+3,AL
    MOV AH,1H
    INT 21H
    SUB AL,30H
    MOV STRI2+2,AL
    MOV AH,1H
    INT 21H
    SUB AL,30H
    MOV STRI2+1,AL
    MOV AH,1H
    INT 21H
    SUB AL,30H
    MOV STRI2,AL
    MOV DL,0AH
    MOV AH,2H
    INT 21H
    MOV DL,0DH
    MOV AH,2H
    INT 21H
    MOV SI,OFFSET STRI1 
    PUSH [SI]
    PUSH [SI+1]
    PUSH [SI+2]
    PUSH [SI+3]
    MOV DI,OFFSET STRI2
    PUSH [DI]
    PUSH [DI+1]
    PUSH [DI+2]
    PUSH [DI+3]
    MOV CX,5 
    CLC 
CYCLE:
    MOV AL,[SI]
    ADC AL,[DI]
    AAA 
    MOV [DI],AL
    INC SI
    INC DI
LOOP CYCLE
    MOV CX,4 
S:
    POP DX
    ADD DL,30H
    MOV AH,2
    INT 21H
LOOP S
    MOV DL,ADDC
    MOV AH,2
    INT 21H
    MOV CX,4
S2:
    POP DX
    ADD DL,30H
    MOV AH,2
    INT 21H
LOOP S2
    MOV DL,EQUAL
    MOV AH,2
    INT 21H
    MOV SI,OFFSET STRI2
    MOV DL,[SI+4]
    ADD DL,30H
    MOV AH,2
    INT 21H
    MOV DL,[SI+3]
    ADD DL,30H
    MOV AH,2
    INT 21H
    MOV DL,[SI+2]
    ADD DL,30H
    MOV AH,2
    INT 21H
    MOV DL,[SI+1]
    ADD DL,30H
    MOV AH,2
    INT 21H
    MOV DL,[SI+0]
    ADD DL,30H
    MOV AH,2
    INT 21H
    RET
START ENDP
CODE ENDS
END START

实验结果:

在这里插入图片描述
在这里插入图片描述
4.

实验代码:

DATA SEGMENT
    STR1 DB 'PLEASE INPUT THE FIRST NUMBER:$'
    STR2 DB 'PLEASE INPUT THE SECOND NUMBER:$'
    STR3 DB 'RESULT=$'
    A DW ?
    B DW ?
    C DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
    MAIN PROC FAR
    START:
        MOV AX,DATA
        MOV DS,AX
        LEA DX,STR1 
        MOV AH,9H
        INT 21H
        CALL INPUT
        MOV A,BX
        LEA DX,STR2 
        MOV AH,9H
        INT 21H
        CALL INPUT
        MOV B,BX
        LEA DX,STR3 
        MOV AH,9H
        INT 21H
        MOV AX,A
        AAD
        MOV BX,AX
        MOV AX,B
        AAD
        MUL BX                  
        MOV WORD PTR C,AX  
        MOV DI,0AH             
        MOV CX,0
    TOTEN:            
        DIV DI
        PUSH DX
        INC CX
        CMP AX,0
        JE PRINT
        CWD
        JMP TOTEN
    PRINT:            
        POP DX
        ADD DL,30H
        MOV AH,2H
        INT 21H
    LOOP PRINT
        RET
    MAIN ENDP
    INPUT PROC
        MOV BX,0
        INPUTA:
        MOV AH,1   
        INT 21H
        SUB AL,30H
        MOV BL,AL
        MOV AH,1        
        INT 21H
        CMP AL,0DH  
        JE EXIT
        SUB AL,30H
        MOV CL,8    
        ROL BX,CL
        MOV BL,AL
        JMP EXIT
        EXIT:
            CALL CRLF
        RET
    INPUT ENDP
    CRLF PROC NEAR
        MOV DL,0AH
        MOV AH,2H
        INT 21H
        MOV DL,0DH
        MOV AH,2H
        INT 21H
        RET
    CRLF ENDP

CODE ENDS
END START

实验结果:

在这里插入图片描述

四、实验总结

通过本次实验,我学会了数值转换和数码编程相关的内容,掌握了不同进制数及编码相互转换的程序设计方法,而且加深对数制转换的理解。除此之外,我还学会了运算类指令对各状态标志位的影响及其测试方法和使用软件监视变量的方法。

  • 14
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值