data ends
stack segment
db 256 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov al, 0c5h
call disp_al
mov al, 065h
call disp_al
mov ah, 04ch
int 21h
disp_al子程序将寄存器AL中的数值以十六进制显示出来
disp_al:
mov dh, al
mov bx, 2 bx用于循环,一个字节最多可以显示成两个字符,所以循环次数是2次
mov cl, 4 首先显示高4位,在下次循环进再显示低4位
shr al, cl
again:
and al, 0fh
cmp al, 9
ja hex
add al, '0' 如果小于9,加上字符'0'将数字转换字符
jmp disp
hex:
sub al, 10 如果大于9,先减去10,再加上字符'A',就可以将数字转换成相应的'A'~'F'
add al, 'A'
disp:利用中断显示字符
mov dl, al
mov ah, 02h
int 21h
mov al, dh
dec bx
test bx, bx
jnz again
ret
code ends
end start
X * 10 = X * 2 + X * 8SAL AL,1 X * 2
MOV BL,AL X * 2的乘积存入BX
SAL AL,1 X * 4
SAL AL,1 X * 8
ADD AL,BL X * 2 + X * 8 = X * 10
可以把里面的 AL BL 改为 AX BX 防止溢出。
STACKS SEGMENT PARA STACK 'stack'DB200H DUP(?)
STACKS ENDS
DATA SEGMENT
BUFFER DB10 DUP(0) ,0DH,0AH,24H
DATA ENDS
CODE SEGMENT
ASSUMECS:CODE, DS:DATA ,SS:STACKS
START: MOV AX,DATA
MOV DS,AX 初始化数据段寄存器
MOV AX,STACKS
MOV SS,AX 初始化堆栈段寄存器
MOV AL,0A5H
PUSH AX
LEA SI,BUFFER+10
CALL AL2HEX 转换成16进制
MOV DX,SI 输出
MOV AH,9
INT 21H
POP AX
LEA SI,BUFFER+10
CALL AL2BIN 转换成2进制
MOV DX,SI输出
MOV AH,9
INT 21H
MOV AX,4C00H程序结束
INT 21H
AL2HEX PROC NEAR 转换成16的子程序
PUSH AX
CALL AL2HEXS
POP AX
MOV CL,4
SHR AL,CL
AL2HEXS: DEC SI
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JCAL2HEXL1
ADD AL,7
AL2HEXL1: MOV [SI],AL
RET
AL2HEX ENDP
AL2BIN PROC NEAR 转换成2进制的子程序
MOV CX,8
AL2BINL1: DEC SI
MOV BYTE PTR [SI],'1'
ROR AL,1
JCAL2BINL2
MOV BYTE PTR [SI],'0'
AL2BINL2: LOOP AL2BINL1
RET
AL2BIN ENDP
CODE ENDS
END START
以上程序已经测试,希望能对你帮助
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)