1将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
;------------------------------
楼主啊,要慷慨一点,15分太低了,难怪都没人回答你。你百度搜一下,这种题几百分的。下面的程序是修改其他地方的:
stack segment stack 'stack'
dw 32 dup()
stack ends
data segment
BCD1 DB 'Please input number A:$'
BCD2 DB 'Please input number B:$'
BCD3 DB 'The sum of A and B is :$'
N1 DB 7,0,7 DUP(0)
N2 DB 7,0,7 DUP(0)
OBUF DB 9 DUP(0)
data ends
code segment
begin proc far
assume ss:stack, cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV DX,OFFSET BCD1
MOV AH,9
INT 21H
MOV DX,OFFSET N1
MOV AH,10
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV DX,OFFSET BCD2
MOV AH,9
INT 21H
MOV DX,OFFSET N2
MOV AH,10
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV DX,OFFSET BCD3
MOV AH,9
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
XOR AX,AX
MOV BL,N1+1
MOV BH,0
MOV CX,BX
MOV OBUF[BX+1],'$'
AG: MOV AL,N1[BX+1]
ADC AL,N2[BX+1]
AAA
PUSHF
ADD AL,30H
MOV OBUF[BX],AL
DEC BX
POPF
LOOP AG
adc obuf,0
add obuf,30h
MOV DX,OFFSET OBUF
MOV AH,9
INT 21H
ret
begin endp
code ends
end begin
最近在复习汇编,顺便找些练练,上面的答案确实是6位10进制加法,也有进位,但是,它要求位数必须相等,这样就不太好了,多加几十行代码可以改好,让它实现任意位数的加法,对两个加数的位数没有限制,代码我就不贴了,你自己改吧。
跑马灯程序用汇编是很好实现的,只要用好循环移位指令就可以,以下是程序。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
LOOP:
MOV P1,A ;将控制字送端口
RL A ;控制字循环左移
LCALL DELAY ;延时
SJMP LOOP
DELAY: ;延时大概1秒
MOV R2,#10
DLY1:
MOV R3,#200
DLY2:
MOV R4,#250
DJNZ R4,$
DJNZ R3,DLY2
DJNZ R2,DLY1
RET
END
以上就是关于汇编语言 子程序设计全部的内容,包括:汇编语言 子程序设计、用汇编语言编写一段程序、用汇编语言编写跑马灯程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)