直接定址表求助
assume cs:codecode 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 ;用高4位的值作为相对于table的偏移,取得对应的字符
mov bx,0b800h
mov es,bx
mov es:,ah
mov bl,al
mov bh,0
mov al,table ;用低4位的值作为相对于table的偏移,取得对应的字符
mov es:,al
pop es
pop bx
ret
code ends
end start
这两段不懂,求指教:
mov bl,ah
mov bh,0
mov ah,table
mov bl,al
mov bh,0
mov al,table
希望讲解详细些,每一步什么意思?谢谢 本帖最后由 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 ;把直接定址表的第一个元素给ahah = '0'
mov bl,al ;al = 00001110bl = al bl = 00001110
mov bh,0 ; bh = 0 bx = 00000000 00001110
mov al,table ; 把把直接定址表的第15个元素给alal = 'e' qq1242009750 发表于 2018-2-10 00:13
获取直接定址表的数据
mov ah,al // al = 00001110
讲的真清楚 谢谢
页:
[1]