|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- assume cs:code
- code segment
- start:
- mov al,0eh
- call showbyte
- mov ax,4c00h
- int 21h
- ;子程序:
- ;用al传送要显示的数据
- showbyte:
- jmp short show
- table db '0123456789ABCDEF' ;字符表
- show: push bx
- push es
- mov ah,al
- shr ah,1
- shr ah,1
- shr ah,1
- shr ah,1 ;右移4位,ah中得到高4位的值
- and al,00001111b ;al中为低4位的值
- mov bl,ah
- mov bh,0
- mov ah,table[bx] ;用高4位的值作为相对于table的偏移,取得对应的字符
- mov bx,0b800h
- mov es,bx
- mov es:[160*12+40*2],ah
- mov bl,al
- mov bh,0
- mov al,table[bx] ;用低4位的值作为相对于table的偏移,取得对应的字符
-
- mov es:[160*12+40*2+2],al
- pop es
- pop bx
- ret
- code ends
- end start
复制代码
这两段不懂,求指教:
mov bl,ah
mov bh,0
mov ah,table[bx]
mov bl,al
mov bh,0
mov al,table[bx]
希望讲解详细些,每一步什么意思?谢谢
本帖最后由 qq1242009750 于 2018-12-9 17:16 编辑
获取直接定址表的数据
mov ah,al // al = 00001110
shr ah,1
shr ah,1
shr ah,1
shr ah,1 ;右移4位,ah中得到高4位的值 ah = 00000000
and al,00001111b ;al中为低4位的值 al = 00001110
mov bl,ah ; bl = 0
mov bh,0 ;bh = 0 bx = 0
mov ah,table[bx] ;把直接定址表的第一个元素给ah ah = '0'
mov bl,al ; al = 00001110 bl = al bl = 00001110
mov bh,0 ; bh = 0 bx = 00000000 00001110
mov al,table[bx] ; 把把直接定址表的第15个元素给al al = 'e'
|
|