您的位置 首页 硬件

汇编入门学习笔记 (十四)—— 直接定址表

疯狂的暑假学习之汇编入门学习笔记(十四)——直接定址表参考:《汇编语言》王爽第16章1.描述单元长度的标号普通的标号:a…

张狂的暑假学习之 汇编入门学习笔记 (十四)—— 直接定址表

参阅: 《汇编语言》 王爽 第16章

1. 描绘单元长度的标号

一般的标号:a,b

  1. assumecs:code
  2. codesegment
  3. a:db1,2,3,4,5,6,7,8
  4. b:dw0
  5. start:
  6. movsi,offseta
  7. movdi,offsetb
  8. movah,0
  9. movcx,8
  10. s:
  11. moval,cs:[si]
  12. addcs:[di],ax
  13. incsi
  14. loops
  15. movax,4c00h
  16. int21h
  17. movax,4c00h
  18. int21h
  19. codeends
  20. endstart

细心看一下,下面代码的标号的不同。下面的标号a、b后边没有冒号。它们是能够描绘单元长度的标号。又名数据标号

  1. assumecs:code
  2. codesegment
  3. adb1,2,3,4,5,6,7,8
  4. bdw0
  5. start:
  6. movsi,offseta
  7. movah,0
  8. movcx,8
  9. s:
  10. moval,a[si]
  11. addb,ax
  12. incsi
  13. loops
  14. movax,4c00h
  15. int21h
  16. movax,4c00h
  17. int21h
  18. codeends
  19. endstart

咱们能够:

mov ax,bx 相当于 mov ax,cs:[8]

mov b,2 相当于 mov word ptr cs:[8],2

inc b 相当于inc word ptr cs:[8]

mov al,a[si]相当于 mov al,cs:0[si]

mov al,a[3] 相当于mov al,cs:0[3]

可是下面的是错的

mov al,b 由于b是dw,字型的

add b,al

2. 在其他段中运用数据标号

一般的后边带有“:”的标号,是只能界说在代码段的。数据标号能够用在其他段中。

比如:留意假如想把ds:b 直接写成 b,就必须在assume 后加上 cs:data

  1. assumecs:code,ds:data
  2. datasegment
  3. adb1,2,3,4,5,6,7,8
  4. bdw0
  5. dataends
  6. codesegment
  7. start:
  8. movax,data
  9. movds,ax
  10. movsi,offseta
  11. movah,0
  12. movcx,8
  13. s:
  14. moval,a[si]
  15. addb,ax
  16. incsi
  17. loops
  18. movax,4c00h
  19. int21h
  20. movax,4c00h
  21. int21h
  22. codeends
  23. endstart

3. 直接定址表

咱们能够建一个表,用查表的方法来大大加速处理速度。

比如:在屏幕显现对应16进制数字的字符。这儿字符就用来一个表。

  1. assumecs:code
  2. codesegment
  3. start:
  4. moval,0eh
  5. callshowbyte
  6. movax,4c00h
  7. int21h
  8. showbyte:
  9. jmpshortshow
  10. tabledb0123456789ABCDE;字符表
  11. show:
  12. pushbx
  13. pushes
  14. movah,al
  15. shrah,1;右移4位,ah中保存高4位,al中保存第4位
  16. shrah,1
  17. shrah,1
  18. shrah,1
  19. andal,00001111b
  20. movbl,ah
  21. movbh,0
  22. movah,table[bx]
  23. movbx,0b800h
  24. moves,bx
  25. moves:[160*12+40*2],ah
  26. movbl,al
  27. movbh,0
  28. moval,table[bx]
  29. moves:[160*12+40*2+2],al
  30. popes
  31. popbx
  32. ret
  33. codeends
  34. endstart

咱们还能够在直接定址表中存储子程序的地址,然后便利的完成不同子程序的调用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/276849.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部