汇编语言中,有一种编程方法:直接定址表

这种方法和高级语言,C语言中的数组有类似的思想,就是将参数编排在一起,然后通过数组名的调用,得到需要的数值

汇编语言中,带冒号的标号在程序中可以知道代码的位置,而不带冒号的标号可以在程序中找到代码位置的同时知道所表示的参数的大小

比如说:table db 0,这里的table就是一个不带冒号的标号,如果定位到这个标号,那么就知道这个标号后面的数值是db型的

这里还需要强调一下call指令的一种用法,call word ptr 内存单元地址

这个指令的作用可以写为:push IP

jmp word ptr 内存单元地址

这样,在用直接地址的方法时,就可以用call指令来定位表中存放的标号地址,调用子函数,下面的例程就是用call指令来实现对地址的定址方法

代码功能:用ah来确定调用的子函数的序号,第一个子函数是清屏的功能,第二个子函数是改变字体颜色的功能

代码:

[plain] view plain copy
  1. assume cs:code
  2. code segment
  3. table dw sub1, sub2                                                                       ;用直接定址表进行地址的寻找
  4. start:                                              mov ah, 1                ;ah存放调用的函数的序号ah是0就调用sub1,ah是1就调用sub2
  5. mov bl, ah
  6. mov bh, 0
  7. add bx, bx                             ;因为table是dw型的数据,所以要定址,必须要将定址的序列号乘以2
  8. mov al, 2                ;al存放的是颜色值
  9. call word ptr table[bx]                ;这句就是call的用法,直接定址到标号处,直接调用标号的函数
  10. mov ax, 4C00H
  11. int 21H
  12. sub1:           push bx                                 ;函数的作用是清屏
  13. push cx
  14. push es
  15. push ax
  16. mov bx, 0B800H
  17. mov es, bx
  18. mov bx, 0
  19. mov cx, 2000
  20. s1:     mov byte ptr es:[bx], ' '
  21. add bx, 2
  22. loop s1
  23. pop ax
  24. pop es
  25. pop cx
  26. pop bx
  27. ret
  28. sub2:           push ax                             ;函数的功能是改变字体的颜色
  29. push es
  30. push bx
  31. push cx
  32. mov bx, 0B800H
  33. mov es, bx
  34. mov bx, 1
  35. mov cx, 2000
  36. s2:     and byte ptr es:[bx], 11111000B      ;先将后三位用and运算清零
  37. or byte ptr es:[bx], al              ;用or运算将后三位用al替代
  38. add bx, 2
  39. loop s2
  40. pop cx
  41. pop bx
  42. pop es
  43. pop ax
  44. ret
  45. code ends
  46. end start

当ah是0时:

当ah是1时:

汇编语言不带冒号标号的用法相关推荐

  1. java xml中的冒号_Java jdom解析xml文件带冒号的属性

    Java jdom解析xml文件带冒号的属性 如果xml文件解析带了冒号的属性,一般都是要特别处理,这里是命名空间,N年前遇到过一次忘记记录,后来也忘了,这次再记录下. 解决了,记录下,分享给大家,百 ...

  2. 冒号 : 与双冒号 :: 的C++用法

    1.冒号(:)用法 (1)类名冒号:定义类的继承. (2)构造函数后面的冒号:分割作用,类给成员变量赋值. 初始化列表,更适用于成员变量的常量const型. struct _XXX{ _XXX() : ...

  3. Win 10 自带的计划任务用法

    Win 10 自带的计划任务用法 折磨了我一早上,终于搞懂了,记录一下~~ 1.首先右击我的电脑,选择管理 2.进入计算机管理之后,选择任务计划程序>>任务计划程序库.当堪当右方出现操作之 ...

  4. Java jdom解析xml文件带冒号的属性

    Java jdom解析xml文件带冒号的属性 转载请标明出处: https://dujinyang.blog.csdn.net/article/details/99644824 本文出自:[奥特曼超人 ...

  5. Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略

    Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法.如何查询某个函数&关键词的用法.输出一个类或者实例化对象的所有属性和方法名之详细攻略 ...

  6. Windows自带certutil工具校验用法

    windows自带校验工具certutil,记录用法如下. certutil -hashfile <file> MD5 certutil -hashfile <file> SH ...

  7. python列表冒号逗号常规用法

    列表中冒号用法 L = (1,2,3,4,5,6) 取第i个元素:L[i] 取倒数第i个元素:L[-i] 取第i到第j个元素(不包含第k个):L[i:j] 取第i个元素以后剩下的元素:L[i:] 取前 ...

  8. python找不到自带的argparse_python argparse用法总结

    1. argparse介绍 是python的一个命令行解析包,非常编写可读性非常好的程序 2. 基本用法 prog.py是我在linux下测试argparse的文件,放在/tmp目录下,其内容如下: ...

  9. java函数参数使用冒号_java8中:: 用法示例(JDK8双冒号用法)

    JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下. 代码其实很简单: 以前的代码一般是如此的: public class Accep ...

最新文章

  1. Asterisk安装
  2. Java实现字符全阵列阵列
  3. 分享懒人张RDLC报表(四)
  4. java横线_知识点:java一些方法会有横线?以Date 过期方法为例
  5. Java开发人员的5种工具
  6. c++继承父类的子类,如何调用父类的同名函数?
  7. 2019matlab中的floyd,基于matlab的floyd算法详解
  8. java、c语言、python、c++的不同之处_总结几点C/C++、Java与Python的区别
  9. 台达plc读取变频器电流案例_PLC模拟量信号数据转换过程
  10. 第十四届华中科技大学程序设计竞赛--J Various Tree
  11. java cstring_Java CString類代碼示例
  12. docker常用功能操作记录5
  13. 神雕侠侣手游服务器维护,《神雕侠侣》2020年6月18日更新维护新服开启公告
  14. 最值得推荐的6个物联网开发平台
  15. 顺序表的具体使用方法.数据解构(二)
  16. 问题1084:搭数字Ⅰ
  17. 对可口可乐瓶进行图像识别
  18. IDEA java类文件左下角出现红色的J标识,解决方法
  19. mysql workbench8.0关键词大写_Mysql从入门到精通全文整理
  20. 数学建模—MATLAB基本使用(一)

热门文章

  1. vs2013怎么清理解决方案_厕所漏水怎么办?厕所免拆砖防水维修方案
  2. java注解传递value_spring中@value注解需要注意的问题
  3. 2021考研计算机网络,2021考研:计算机网络复习重点
  4. php html标签闭合,php截取字符串,完美html自动闭合
  5. 如何写单片机的寄存器,这篇文章带你入门。
  6. 基于VHDL报警系统设计
  7. 函数的傅立叶展开掐死我吧_关于文章《傅里叶分析之掐死教程》的再一点小思考...
  8. 鼠标的计算机基础知识,2、使用鼠标--电脑基础知识
  9. centos mysql 连接数_CentOS7.2_调整mysql数据库最大连接数
  10. 随机抽样java_java生成抽样随机数的多种算法