鱼C论坛

 找回密码
 立即注册
查看: 2313|回复: 0

[学习笔记] 汇编语言上天之路72-74(直接定址法)

[复制链接]
发表于 2017-7-20 11:48:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
72-74(直接定址法)
        标号a : db 1,2,3,4,5,6,7,8     a表示的是内存单元的地址(只能在代码段使用,不能其他段使用)
        标号b后面不加: b dw 0               a就同时描述了内存单元地址和每个单元长度

        mov ax,b = mov ax,cs:[8]
        mov b,2 = mov word ptr cs:[8],2

        mov al,a[si] = mov al,cs:0[si]


        如果想在代码段用数据标号访问数据,则需要用伪指令assume将标号和段寄存器联系起来(否则编译器无法确定)
        c dw a,b
        相当于c dw offset a,offset b
       
        c dd a,b
        相当于c dw offset a,seg a,offset b,seg b


  1. assume  cs:code

  2. code segment

  3. start:
  4.     mov ax, 0
  5.     mov es, ax
  6.     mov ax, 200h
  7.     mov di, ax

  8.     push cs
  9.     pop ds
  10.     mov ax, offset int7c
  11.     mov si, ax

  12.     mov cx, offset int7cend - offset int7c

  13.     cld
  14.     rep movsb

  15.     cli
  16.     mov ax, 0
  17.     mov ds, ax
  18.     mov bx, 07ch*4
  19.     mov word ptr ds:[bx], 200h
  20.     mov word ptr ds:[bx+2], 0
  21.     sti

  22.     mov ax, 4c00h
  23.     int 21h

  24. int7c:
  25.     jmp short int7ccode
  26.     table dw sub1-int7c+200h, sub2-int7c+200h

  27. int7ccode:
  28.     push ax
  29.     push bx

  30.     cmp ah, 1
  31.     ja int7c_ok
  32.     sub bx, bx
  33.     mov bl, ah

  34.     add bx, bx
  35.     push cs
  36.     pop ds
  37.     call word ptr [bx+200h+2]

  38. int7cok:
  39.     pop bx
  40.     pop ax

  41.     iret

  42.     ; clear screen
  43. sub1:
  44.     push bx
  45.     push cx
  46.     push es

  47.     mov bx, 0b800h
  48.     mov es, bx
  49.     mov bx, 0
  50.     mov cx, 2000

  51. sub1s:
  52.     mov byte ptr es:[bx], ' '
  53.     add bx, 2
  54.     loop sub1s

  55.     pop es
  56.     pop cx
  57.     pop bx

  58.     ret

  59.     ; change text color

  60. sub2:
  61.     push bx
  62.     push cx
  63.     push es

  64.     mov bx, 0b800h
  65.     mov es, bx
  66.     mov bx, 1
  67.     mov cx, 2000

  68. sub2s:
  69.     and byte ptr es:[bx], 11111000b
  70.     or byte ptr es:[bx], al
  71.     add bx, 2
  72.     loop sub2s

  73.     pop es
  74.     pop cx
  75.     pop bx

  76.     ret
  77. suberror:


  78.     ret

  79. int7cend:
  80.     nop
  81. code ends

  82. end start
复制代码

评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 17:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表