汇编语言 第十六章 直接定址表 小白笔记

16.1 描述了单元长度的标号

在数据前写标号时不添加“:”

此时标号名称代表的意义包含数据长度和数据地址

我们称它为数据标号(在他的后边一定要有数据类型,dd、dw、db等)

16.2 在其他段中使用数据标号

注意:

有“:”的地址标号只能在代码段中使用,不能在其他段中使用。

仅仅在assume中将段和寄存器联系起来不能真正联系起来,要想联系还要用mov将寄存器和段地址联系起来。

还可以将标号当作数据,这个时候如果标号前是dw就代表标号对应的偏移地址,如果是dd就代表偏移地址和段地址

seg操作符是取段地址

16.3直接定址表

编写子程序 以十六进制的形式在屏幕中间显示给定的字节型数据

屏幕显示ascll字符

字节型数据8位

16进制和2进制的关系是:四位二进制用一位16进制表示

那么一个8位的就要用两位16进制表示

书上说一个字节的高4位和低4位分开

代码前边说用al保存传送的数据。

下图表示如何将al分成两部分

mov ah,al      ;将al中的值全部给ah
shr ah,1
shr ah,1
shr ah,1
shr ah,1        ;ah向右移动4位这样,ah'的低四位保存的就是al的高四位
and al,00001111b;将al的高四位置0

然后抄代码

assume cs:code,ds:data,ss:stack
data segment
         db 128 dup(0)
data ends

stack segment stack
          db 128 dup(0)
stack ends




code segment

    start:   mov  ax,stack
             mov  ss,ax
             mov  sp,128

            mov al,66
            call showbyte



             mov  ax,4C00h
             int  21h



    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
             and  al,00001111b

             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

16.4 程序入口地址的直接定制表

assume cs:code,ds:data,ss:stack
data segment
         db 128 dup(0)
data ends

stack segment stack
          db 128 dup(0)
stack ends




code segment

    start:    mov  ax,stack
              mov  ss,ax
              mov  sp,128
              mov ah,2
              mov al,5

              call setscreen



              mov  ax,4C00h
              int  21h



    setscreen:jmp  short set
    table     dw   sub1,sub2,sub3,sub4

    set:      push bx
                
              cmp  ah,3
              ja   sret
              mov  bl,ah
              mov  bh,0
              add  bx,bx

              call word ptr table[bx]

    sret:     pop  bx
              ret
                

    sub1:     push bx
              push cx
              push es
              mov  bx,0b800h
              mov  es,bx
              mov  bx,0
              mov  cx,2000
    sub1s:    mov  byte ptr es:[bx],' '
              add  bx,2
              loop sub1s
              pop  es
              pop  cx
              pop  bx
              ret

    sub2:     push bx
              push cx
              push es
              mov  bx,0b800h
              mov  es,bx
              mov  bx,1
              mov  cx,2000
    sub2s:    and  byte ptr es:[bx],11111000b
              or   es:[bx],al
              add  bx,2
              loop sub2s

              pop  es
              pop  cx
              pop  bx
              ret

    sub3:     push bx
              push cx
              push es
              mov  cl,4
              shl  al,cl
              mov  bx,0b800h
              mov  es,bx
              mov  bx,1
              mov  cx,2000
    sub3s:    and  byte ptr es:[bx],10001111b
              or   es:[bx],al
              add  bx,2
              loop sub3s
              pop  es
              pop  cx
              pop  bx
              ret


    sub4:     push cx
              push si
              push di
              push es
              push ds

              mov  si,0b800h
              mov  es,si
              mov  ds,si
              mov  si,160

              mov  di,0

              cld
              mov  cx,24

    sub4s:    
              push cx
              mov  cx,160
              rep  movsb
              pop  cx
              loop sub4s

              mov  cx,80
              mov  si,0

    sub4s1:   mov  byte ptr [160*24+si],' '
              add  si,2
              loop sub4s1

              pop  ds
              pop  es
              pop  di
              pop  si
              pop  cx

              ret










code ends

end start

实验16新的int7ch

;ah传递功能号

;0:清屏

;1:设置前景色

;2:设置背景色

;3:向上滚动一行

;1、2号功能al传递颜色al=(0,1,2,3,4,5,6,7)

刚开始改变al但是不会改变颜色,后来把ret改成iret就可以了

用表格没弄出来不知道为啥,调试的时候发现是call出了问题但是不会解决

索性用判断吧

assume cs:code,ds:data,ss:stack
data segment
         db 128 dup(0)
data ends

stack segment stack
          db 128 dup(0)
stack ends

;ah传递功能号
;0:清屏
;1:设置前景色
;2:设置背景色
;3:向上滚动一行
;1、2号功能al传递颜色al=(0,1,2,3,4,5,6,7)

code segment

    start:    mov  ax,stack
              mov  ss,ax
              mov  sp,128
              

              mov  ax,cs
              mov  ds,ax
              mov  si,offset int7ch
              
              mov  ax,0
              mov  es,ax
              mov  di,200h

              mov  cx,offset int7chend-offset int7ch
              cld
              rep  movsb
              
              mov  ax,0
              mov  es,ax
              mov  word ptr  es:[7ch*4],200h
              mov  word ptr es:[7ch*4+2],0

              mov  ah,1
              mov  al,6
              int  7ch
              



              mov  ax,4C00h
              int  21h



    int7ch:   nop
    

    set:      
                
              cmp  ah,0
              je   do1
              cmp  ah,1
              je   do2
              cmp  ah,2
              je   do3
              cmp  ah,3
              je   do4
              jmp  short sret

    do1:      call sub1
              jmp  short sret

    do2:      call sub2
              jmp  short sret

    do3:      call sub3
              jmp  short sret

    do4:      call sub4
              jmp  short sret

    sret:     iret

              
              
              

                

    sub1:     push bx
              push cx
              push es
              mov  bx,0b800h
              mov  es,bx
              mov  bx,0
              mov  cx,2000
    sub1s:    mov  byte ptr es:[bx],' '
              add  bx,2
              loop sub1s
              pop  es
              pop  cx
              pop  bx
              ret

    sub2:     push bx
              push cx
              push es
              mov  bx,0b800h
              mov  es,bx
              mov  bx,1
              mov  cx,2000
    sub2s:    and  byte ptr es:[bx],11111000b
              
              or   es:[bx],al
              add  bx,2
              loop sub2s

              pop  es
              pop  cx
              pop  bx
              ret

    sub3:     push bx
              push cx
              push es
              
              mov  cl,4
              shl  al,cl
              mov  bx,0b800h
              mov  es,bx
              mov  bx,1
              mov  cx,2000
    sub3s:    and  byte ptr es:[bx],10001111b
              or   es:[bx],al
              add  bx,2
              loop sub3s
              pop  es
              pop  cx
              pop  bx
              ret


    sub4:     push cx
              push si
              push di
              push es
              push ds

              mov  si,0b800h
              mov  es,si
              mov  ds,si
              mov  si,160

              mov  di,0

              cld
              mov  cx,24

    sub4s:    
              push cx
              mov  cx,160
              rep  movsb
              pop  cx
              loop sub4s

              mov  cx,80
              mov  si,0

    sub4s1:   mov  byte ptr [160*24+si],' '
              add  si,2
              loop sub4s1

              pop  ds
              pop  es
              pop  di
              pop  si
              pop  cx

              ret

    int7chend:nop








code ends

end start

哔哩哔哩视频

assume cs:code,ds:data,ss:stack
data segment
         db 128 dup(0)
data ends

stack segment stack
          db 128 dup(0)
stack ends



;ah传递功能号
;0:清屏
;1:设置前景色
;2:设置背景色
;3:向上滚动一行
;1、2号功能al传递颜色al=(0,1,2,3,4,5,6,7)
code segment

    start:    mov  ax,stack
              mov  ss,ax
              mov  sp,128
              

              mov  ax,cs
              mov  ds,ax
              mov  si,offset int7ch
              
              mov  ax,0
              mov  es,ax
              mov  di,200h

              mov  cx,offset int7chend-offset int7ch
              cld
              rep  movsb
              
              mov  ax,0
              mov  es,ax
              mov  word ptr  es:[7ch*4],200h
              mov  word ptr es:[7ch*4+2],0

              mov  ah,2
              mov  al,6
              int  7ch
              



              mov  ax,4C00h
              int  21h



    int7ch:   jmp  short set
    table     dw   offset  sub1-offset int7ch+200h
              dw   offset sub2-offset int7ch+200h
              dw   offset sub3-offset int7ch+200h
              dw   offset sub4-offset int7ch+200h

    set:      push bx
                
              cmp  ah,3
              ja   sret
              mov  bl,ah
              mov  bh,0
              add  bx,bx
              add  bx,offset table-offset int7ch +200h

                
              
             
              
              call word ptr cs:[bx]
   
    sret:     pop  bx
              iret
                

    sub1:     push bx
              push cx
              push es
              mov  bx,0b800h
              mov  es,bx
              mov  bx,0
              mov  cx,2000
    sub1s:    mov  byte ptr es:[bx],' '
              add  bx,2
              loop sub1s
              pop  es
              pop  cx
              pop  bx
              ret

    sub2:     push bx
              push cx
              push es
              mov  bx,0b800h
              mov  es,bx
              mov  bx,1
              mov  cx,2000
    sub2s:    and  byte ptr es:[bx],11111000b
              or   es:[bx],al
              add  bx,2
              loop sub2s

              pop  es
              pop  cx
              pop  bx
              ret

    sub3:     push bx
              push cx
              push es
              mov  cl,4
              shl  al,cl
              mov  bx,0b800h
              mov  es,bx
              mov  bx,1
              mov  cx,2000
    sub3s:    and  byte ptr es:[bx],10001111b
              or   es:[bx],al
              add  bx,2
              loop sub3s
              pop  es
              pop  cx
              pop  bx
              ret


    sub4:     push cx
              push si
              push di
              push es
              push ds

              mov  si,0b800h
              mov  es,si
              mov  ds,si
              mov  si,160

              mov  di,0

              cld
              mov  cx,24

    sub4s:    
              push cx
              mov  cx,160
              rep  movsb
              pop  cx
              loop sub4s

              mov  cx,80
              mov  si,0

    sub4s1:   mov  byte ptr [160*24+si],' '
              add  si,2
              loop sub4s1

              pop  ds
              pop  es
              pop  di
              pop  si
              pop  cx

              ret

    int7chend:nop








code ends

end start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y6y6y666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值