用汇编语言将BCD码转化为二进制数

RT,在线等~
一楼的答案运行之后提示 : missing or unreachable CS
期待行家解决~

以下程序将10个两位压缩bcd数转化为二进制数,并和给出的结果进行比较。供参考:

        CODE  SEGMENT
              ASSUME    CS:CODE
              ORG       100H
      START:
              JMP       BB
          SR  DB        31H,32H,61H,41H,42H,03H,77H,81H,93H,55H
          DE  DB        1FH,20H,3DH,29H,2AH,03H,4DH,51H,5DH,37H
          RE  DB        10 DUP(0)
;     sr即source(存放压缩bcd数),re即result
;     你给出的比对结果存入de中,在程序的后半部分进行比对
;     程序在tasm中调试通过
           X  DB        0
         MSG  DB        'equal',10,13,'$'

         BB:  PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES

              LEA       SI,SR
              LEA       DI,RE
              MOV       CX,10
     AGAIN1:
              MOV       AL,BYTE PTR[SI]
              MOV       X,AL
              ROL       X,4         ; 在masm中 应将本行变成4行 rol x,1
              MOV       AL,X
              AND       AL,0FH
              MOV       AH,0
              MOV       BL,10
              MUL       BL
              ROL       X,4         ; 在masm中 应将本行变成4行 rol x,1
              MOV       BL,X
              AND       BL,0FH
              ADD       AL,BL
              MOV       BYTE PTR[DI],AL
              INC       SI
              INC       DI
              LOOP      AGAIN1

              MOV       CX,10
              LEA       SI,RE
              LEA       DI,DE
     AGAIN2:
              MOV       AL,[SI]
              CMP       AL,[DI]
              JNE       AGAIN3
              LEA       DX,MSG
              MOV       AH,9
              INT       21H
              LOOP      AGAIN2

     AGAIN3:
              MOV       AH,4CH
              INT       21H
        CODE  ENDS
              END       START

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-11-07

用汇编语言将BCD码转换成二进制数,

并以二进制串的形式输出,在屏幕上显示出来

以 1537 的 BCD 码 1537H 为例。

转换程序如下:

显示时,滤掉了前部的无效零。

第2个回答  2009-12-23
data segment
bcd db 1,2,3,4,5 ;bcd码
a dw ? ; 用于存放bcd码转化后的十六进制数
data ends
stack segment para stack‘‘stack‘‘
stapn dw 50 dup
stack ends

code segment
main proc far
assume ds:data,cs:code,ss:stack
start:
;set up stack to retuan

;set DS register to current segment
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax

;maim part of the code goes here
call convert ;调用子程序
mov a,bx
ret
main endp

convert proc near
push si
push cx
push ax
mov si,4
l1:mov al,bcd[si]
cbw
;digit is now in ax
;multiply number in bx by 10 decimal
xchg ax, bx
mov cx,10d
mul cx
xchg ax,bx
;Add digit in ax to number in bx
add bx,ax
dec si
jnz l1
pop ax
pop cx
pop si
exit:mov ah,4ch
int 21h
convert endp

code ends

end start

给分吧~
第3个回答  2019-06-01
以下程序将10个两位压缩bcd数转化为二进制数,并和给出的结果进行比较。供参考:
CODE SEGMENT
ASSUME CS:CODE
ORG 100H
START:
JMP BB
SR DB 31H,32H,61H,41H,42H,03H,77H,81H,93H,55H
DE DB 1FH,20H,3DH,29H,2AH,03H,4DH,51H,5DH,37H
RE DB 10 DUP(0)
; sr即source(存放压缩bcd数),re即result
; 你给出的比对结果存入de中,在程序的后半部分进行比对
; 程序在tasm中调试通过
X DB 0
MSG DB 'equal',10,13,'$'
BB: PUSH CS
POP DS
PUSH CS
POP ES
LEA SI,SR
LEA DI,RE
MOV CX,10
AGAIN1:
MOV AL,BYTE PTR[SI]
MOV X,AL
ROL X,4 ; 在masm中 应将本行变成4行 rol x,1
MOV AL,X
AND AL,0FH
MOV AH,0
MOV BL,10
MUL BL
ROL X,4 ; 在masm中 应将本行变成4行 rol x,1
MOV BL,X
AND BL,0FH
ADD AL,BL
MOV BYTE PTR[DI],AL
INC SI
INC DI
LOOP AGAIN1
MOV CX,10
LEA SI,RE
LEA DI,DE
AGAIN2:
MOV AL,[SI]
CMP AL,[DI]
JNE AGAIN3
LEA DX,MSG
MOV AH,9
INT 21H
LOOP AGAIN2
AGAIN3:
MOV AH,4CH
INT 21H
CODE ENDS
END START
相似回答