yc哈哈哈 发表于 2018-2-9 22:58:37

直接定址表求助

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                ;用高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-2-10 00:13:35

本帖最后由 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'

yc哈哈哈 发表于 2018-2-10 12:29:39

qq1242009750 发表于 2018-2-10 00:13
获取直接定址表的数据

   mov ah,al            // al = 00001110


讲的真清楚 谢谢
页: [1]
查看完整版本: 直接定址表求助