汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数

汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数,第1张

data segment

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 * 8

SAL 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

以上程序已经测试,希望能对你帮助


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12151650.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存