10进制转16进制汇编语言

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;(2)数制转换

;将输入的一个数据以不同进制形式输出。

;要求:

;(a)所有数字从键盘输入;

;(b)输入数据为任意一个小于十万的十进制数据;

;(c)将所输入数据以十六进制在屏幕显示输出(即十进制转十六进制)。

DA TA SEGMENT

KEYBUFFER DB 100

DB 0

DB 100 DUP(0)

STRING1 DB 'Please input decimal data:',' $'

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA,ES:DA TA

START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

LEA DX,STRING1 ;显示提示输出

MOV AH,09H

INT 21H

MOV AH,0AH

LEA DX,KEYBUFFER

INT 21H

LEA SI,KEYBUFFER+1

CALL TRANS10TO16

CALL DISPCR

CALL DISPAX

CALL DISPCR

MOV AX,BX

CALL DISPAX

MOV AH,4CH

INT 21H

DISPAL PROC NEAR

PUSH AX

PUSH CX

PUSH DX

PUSH AX

MOV CL,4 ;处理高位十六进制数

SHR AL,CL

CALL CHANG ;十六进制数变换成ASCII码

MOV AH,02

MOV DL,AL

POP AX

AND AL,0FH ;处理低位十六进制数

CALL CHANG ;同上解释

MOV AH,02

MOV DL,AL

INT 21H

POP DX

POP CX

POP AX

RET

DISPAL ENDP

CHANG PROC NEAR ;数码转换

CMP AL,10

JNGE CHANG1

ADD AL,7

CHANG1:

ADD AL,30H

RET

CHANG ENDP

DISPAX PROC NEAR

XCHG AL,AH

CALL DISPAL

XCHG AH,AL

CALL DISPAL

RET

DISPAX ENDP

DISPCR PROC NEAR

PUSH AX

PUSH DX

MOV AH,2

MOV DL,0AH

INT 21H

MOV AH,2

MOV DL,0DH

INT 21H

POP DX

POP AX

RET

DISPCR ENDP

;将输入缓冲区中以ASCII码表示的十进制数转换成16位二进制数TRANS10TO16 PROC NEAR

PUSH CX

PUSH DX

XOR AX,AX

XOR CX,CX

MOV CL,[SI]

INC SI

MOV AL,[SI]

INC SI

SUB AL,30H

DEC CX

JCXZ TRANSF2 MOV BX,10 TRANSF1:

MUL BX

JC TRANSF_ERR MOV DL,[SI]

INC SI

SUB DL,30H

ADD AL,DL

ADC AH,0

JC TRANSF_ERR LOOP TRANSF1 MOV BX,0 TRANSF2:

JMP TRANSF_OK TRANSF_ERR:

MOV BX,-1 TRANSF_OK:

POP SI

POP DX

POP CX

RET

TRANS10TO16 ENDP CODE ENDS

END START

相关文档
最新文档