汇编语言 子程序设计

1.将AX中的值以十六进制形式显示。
要求:主程序利用寄存器把AX的值传送给子程序。
在子程序中将AX中的值以十六进制形式显示。
2.编写子程序,完成的功能是将DL中的2位十六进制数转换为对应ASCII码。
说明:入口参数AL=待转换的2位十六进制数
出口参数DX=转换后的ASCII码,(高字节对应高位、低字节对应低位)
举例:若AL=2AH,则DX=3241H。
0----9转换为30H----39H +30H
A---F转换为41H----4FH +30H+7H

1.将AX中的值以十六进制形式显示。
要求:主程序利用寄存器把AX的值传送给子程序。
在子程序中将AX中的值以十六进制形式显示。
=====================================
DATA SEGMENT
D1 DW 13276 ;数: 0~65535
DATA ENDS
;------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
;------------------------------
MOV AX, D1 ;取来数字.
CALL DISP_AX
MOV DL, 'H'
MOV AH, 2
INT 21H ;输出H
;------------------------------
MOV AH, 4CH
INT 21H ;返回DOS
;------------------------------
DISP_AX:
MOV BX, 16 ;16进制,要除16
MOV CX, 4 ;求4位16进制数.
ABC:
CWD ;将AX扩展到DX
DIV BX
PUSH DX ;保存余数到堆栈.
LOOP ABC
MOV CX, 4 ;显示4位.
ASD:
POP DX
CMP DL, 10
JB A48
ADD DL, 7
A48:
ADD DL, 48
MOV AH, 2
INT 21H ;输出.
LOOP ASD
RET
;------------------------------
CODE ENDS
END START
===========================
2.编写子程序,完成的功能是将DL中的2位十六进制数转换为对应ASCII码。
说明:入口参数AL=待转换的2位十六进制数
出口参数DX=转换后的ASCII码,(高字节对应高位、低字节对应低位)
举例:若AL=2AH,则DX=3241H。
0----9转换为30H----39H +30H
A---F转换为41H----4FH +30H+7H

;------------------------------
AL_ASC_DX:
MOV AH, 0 ;要除16
MOV CL, 16 ;求16进制数.
DIV CL

CMP AL, 10
JB A48
ADD AL, 7
A48:
ADD AL, 48
MOV DH, AL

CMP AH, 10
JB A482
ADD AH, 7
A482:
ADD AH, 48
MOV DL, AH

RET
;------------------------------追问

谢谢哦

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-29
数放在ax里面
MOV AX,DATAS
MOV DS,AX
mov ax,0f2h
mov cl,4
push ax
shl ax,cl
cmp ah,9
ja n1
add ah,30h
mov dl,ah
mov ah,02h
int 21h
jmp n2
n1:
add ah,37h
mov dl,ah
mov ah,02h
int 21h
n2:
pop ax
and al,0fh
cmp al,9
ja n3
add al,30h
mov dl,al
mov ah,02h
int 21h
jmp n4
n3:
add al,37h
mov dl,al
mov ah,02h
int 21h
n4:
mov ah,4ch
int 21h

上面是16进制输出
相似回答