注册 登录
编程论坛 汇编论坛

关于王爽汇编语言第二版的一个定址表的问题

h262591533 发布于 2011-02-23 12:41, 610 次点击
子程序源代码如下:(是向屏幕输出0~F,制作的表)
  showbyte:jmp short show
            table db '0123456789ABCDEF'     ;字符表
            
       show:push bx
            push es

            mov ah,al
            shr ah,1
            shr ah,1
            shr ah,1                         ;右移4位,AH中得到高4位的值
            shr ah,1                         ;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
在说到这个问题的时候,书本并没有给出完整的程序,只有这一个子程序。
问题1:AX的值并未给出,为什么要将AL赋给AH?
问题2:为什么要右移4位?
问题3:到底程序是如何建立了映射关系?

感谢各位大大抽时间给小弟解答!
5 回复
#2
ansic2011-02-23 12:48
书里讲的已经非常清楚啦。(P292~294)
#3
h2625915332011-02-23 12:49
回复 2楼 ansic
大哥,本书我看完了,我就是怎么都不能理解这个,关键是没有整个程序出来,AX的没有被赋值,怎么能用他做偏移地址寻找到对应的字符呢?
#4
ansic2011-02-23 16:56
要显示的数据不是在AL里嘛,在程序里call showbyte之前将要显示的数值放在AL里即可。这个程序时通过寄存器向子程序传递参数的。
#5
zaixuexi2011-02-23 23:43
1. 跑一跑这个代码
程序代码:
        .model tiny
        .code
        main proc far
start:
        xor ax,ax
        push ds
        push ax
        mov  ax,125                ;传进子程序的参数
        call showbyte
        ret
        main endp
showbyte:
        jmp short show
        table db '0123456789ABCDEF'
show:
        push bx
        push es
        mov ah,al
        mov cl,4
        shr ah,cl
        and al,0fh
        mov bl,ah
        xor bh,bh
        mov ah,table[bx]
        mov bx,0b800h
        mov es,bx
        mov es:[160*12+40*2],ah
        mov bl,al
        mov bh,0
        mov al,table[bx]
        mov es:[160*12+40*2+2],al
        pop es
        pop bx
        ret
        end start



2. 理解下子程序的概念,调用,优势
3. 抄写代码最好不要抄漏
   shr ah,1                         ;al中为低4位的值
   >>>>>>>>>>and al,0000111b<<<<<<<<;你这少抄一句
   mov bl,ah
#6
zaixuexi2011-02-23 23:44
>>>>>>>>>>and al,0000111b<<<<<<<<;你这少抄一句
->
>>>>>>>>>>and al,00001111b<<<<<<<<;你这少抄一句
1