;;;;;;;;;;;;;;BCD TO BINARY;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT
BUFFER1 DW 1657H
BUFFER2 DW ? ;为 BUFFER2 分配存储空间
DATA ENDS
STACK SEGMENT PARA STACK'STACK'
DB 200 DUP(?) ;堆栈段定义并分配存储空间
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: PUSH DS ;DS 中包含的是程序段前缀的起始地址
MOV AX,0
PUSH AX ;设置返回至 DOS 的段值和 IP 值
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;设置段寄存器初值
MOV AX,[BUFFER1] ;传送 BUFFER1 中的数至 AX
AND AX,0F000H ;AX 中除了首位全部置 0
MOV CL,12
SHR AX,CL ;向右移 12 位使最高的四位到最低的位置
MOV DX,AX ;将 AX 中的数据暂时保存在 DX 中
CALL CHANGE ;千位数乘以 10
MOV AX,DX ;将运算后的数据重新传回 AX 中
MOV BX,[BUFFER1] ;传送 BUFFER 中的数据至 BX 中
AND BX,0F00H ;除第二位外全部置 0
MOV CL,8
SHR BX,CL ;右移 8 位
ADD BX,AX ;千位数*10+百位数
MOV DX,BX
CALL CHANGE ;(千位数*10+百位数)*10
MOV AX,DX
MOV BX,[BUFFER1]
AND BX,00F0H ;除第三位外全部置 0
MOV CL,4
SHR BX,CL
ADD BX,AX ;(千位数*10+百位数)*10+十位数
MOV DX,BX
CALL CHANGE ;((千位数*10+百位数)*10+十位数)*10
MOV AX,DX
MOV BX,[BUFFER1]
AND BX,000FH ;除第四位外全部置 0
ADD BX,AX
MOV DX,BX
MOV BUFFER2,DX ;((千位数*10+百位数)*10+十位数)*10+个位数
MOV CX,16
AGAIN: SHL BUFFER2,1
MOV DL,0
评论4