汇编例子之修改B800显存段输出ascii码表
lines equ 19h
row_bytes equ 160 ;显存每行160bytes
col_bytes equ 14d
bottom_addr equ lines*row_bytes
data segment
table db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
data ends
code segment
assume cs:code,ds:data
start:
;清屏
MOV AX,3
INT 10H
mov ax,data
mov ds,ax
;设置ES为显存起始地址
mov ax,0B800H ;字符模式
mov es,ax
xor bx,bx
xor si,si
xor di,di ;DI清0
xor cx,cx
nextc:
;输出ascii
mov dh,04h ;颜色
mov dl,cl
mov es:[bx+di],dx
;输出hex
mov dh,02h ;颜色
mov si,cx
push cx
mov cl,4
shr si,cl
pop cx
mov dl,byte ptr table[si]
mov es:[bx+di+2],dx
mov si,cx
and si,0fh
mov dl,byte ptr table[si]
mov es:[bx+di+4],dx
;输出dec
mov dh,01h ;颜色
mov ax,cx
;百位数
mov dl,100
div dl
mov dl,al
add dl,30h ;转为ascii码
mov es:[bx+di+6],dx
;十位数
mov al,ah
mov ah,0
mov dl,10
div dl
add ax,3030h ;转为ascii码
mov dl,al
mov es:[bx+di+8],dx
;个位数
mov dl,ah
mov es:[bx+di+10],dx
add bx,row_bytes ;跳到下一行
cmp bx,bottom_addr
jb no_bottom
xor bx,bx
add di,col_bytes
no_bottom:
inc cx ;ascii增加
cmp cx,255
jbe nextc
MOV AH,0
INT 16H
mov ax,4C00H
int 21H
code ends
end start
代码转载自百度知道:点击打开链接