汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数
文章目录:
一、汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数
AAM
PUSH AX
MOV AH,2
POP BX
MOV DL,BH
ADD DL,30H
INT 21H
MOV AH,2
MOV DL,BL
ADD DL,30H
INT 21H
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
二、汇编语言 编写一个程序,将AL寄存器中的一位十六进制数转化成ASCII码...
给你一个例子吧~~王爽汇编那本书的课程设计一中的代码
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;以上是表示21年的21个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是表示21年公司收入的21个dword型数据
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;以上是表示21年公司雇员人数的21个word型数据
data ends
showdata segment
db 10 dup(0)
showdata ends
datashop segment
db 10 dup(0)
datashop ends
codesg segment
start:
;数据
mov ax,data
mov ds,ax
;栈
mov ax,showdata
mov ss,ax
mov sp,12
;显示
mov ax,0b800h
mov es,ax
;初始化数据
mov cx,21
mov bx,0
mov bp,320
s: ;显示年份
call showyear
call showinfo
call showperson
call shownumber
add bx,4
add bp,160
loop s
mov ax,4c00h
int 21h
showyear:
;准备
push cx
mov cx,4
mov si,0
mov di,0
;开始
yearlp: mov al,[bx+si+0h]
mov es:[bp+di+0h],al
mov byte ptr es:[bp+di+1h],01000000b
inc si
add di,2
loop yearlp
pop cx
ret
showinfo:
;准备
push cx
;用于存储数据
mov ax,datashop
mov es,ax
;取出数字
mov si,0
mov ax,[bx+si+54h]
add si,2
mov dx,[bx+si+54h]
;规划
push ds
push es
pop ds
push bx
mov bx,0b800h
mov es,bx
;SI用来存放位置
mov si,1
;处理dx是两位数
cmp dx,0ah
ja div3
;处理dx是一位数
cmp dx,0
ja div2
;处理dx是0
mov di,10
jmp div1
div3:
mov di,100
div di
;把商压栈
push ax
;转移余数
mov ax,dx
xor dx,dx
;先处理余数
mov di,10
div di
mov [si],dl
inc si
xor dx,dx
div di
mov [si],dl
inc si
;恢复
pop ax
jmp div1
div2:
mov di,10
div di
mov [si],dl
inc si
div1:
mov bx,10
mov di,20h
call startdiv
pop bx
pop ds
pop cx
ret
showperson:
;准备
push cx
;START
;确定位置
mov ax,bx
xor dx,dx
mov di,2
div di
;取出数字
mov si,ax
mov ax,[si+0a8h]
;准备存储
push ds
push bx
mov di,40h
mov si,1
call show
;END
;恢复
pop bx
pop ds
pop cx
ret
shownumber:
;准备
push cx
;取出资金数字
mov si,0
mov ax,[bx+si+54h]
add si,2
mov dx,[bx+si+54h]
;准备
push dx
push ax
;取出人数数字
;确定位置
mov ax,bx
xor dx,dx
mov di,2
div di
;取出数字
mov si,ax
mov di,[si+0a8h]
;恢复被除数
pop ax
pop dx
;开始除法
div di
;储存商
push ds
push bx
mov di,60h
mov si,1
call show
;恢复
pop bx
pop ds
pop cx
ret
show:
mov cx,datashop
mov ds,cx
mov bx,10
startdiv:
xor dx,dx
div bx
mov [si],dl
cmp ax,0
je enddiv
inc si
jmp startdiv
enddiv:
mov cx,si
showwhat:
mov al,[si]
add al,30h
mov es:[bp+di],al
mov es:[bp+di+1h],al
dec si
add di,2
loop showwhat
ret
codesg ends
end start
这个在debug中运行-g可以查看效果
到此,以上就是小编对于al编写的问题就介绍到这了,希望介绍关于al编写的2点解答对大家有用。
Amysql_youhua_articlehuaunyuan($article);