汇编语言不带冒号标号的用法

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

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

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

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


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

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

jmp word ptr 内存单元地址

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

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

代码:

assume cs:code

code segment

	table dw sub1, sub2                                                                       ;用直接定址表进行地址的寻找

	start:												mov ah, 1                ;ah存放调用的函数的序号ah是0就调用sub1,ah是1就调用sub2
														mov bl, ah
														mov bh, 0
														add bx, bx                             ;因为table是dw型的数据,所以要定址,必须要将定址的序列号乘以2
														mov al, 2                ;al存放的是颜色值
														call word ptr table[bx]                ;这句就是call的用法,直接定址到标号处,直接调用标号的函数
														
														mov ax, 4C00H
														int 21H
														
										sub1:			push bx                                 ;函数的作用是清屏
														push cx
														push es
														push ax
														
														mov bx, 0B800H
														mov es, bx
														
														mov bx, 0
														mov cx, 2000
												s1:		mov byte ptr es:[bx], ' '
														add bx, 2
														loop s1
														
														pop ax
														pop es
														pop cx
														pop bx
														ret
														
										sub2:			push ax                             ;函数的功能是改变字体的颜色
														push es
														push bx
														push cx
														
														mov bx, 0B800H
														mov es, bx
														mov bx, 1
														mov cx, 2000
												s2:		and byte ptr es:[bx], 11111000B      ;先将后三位用and运算清零
														or byte ptr es:[bx], al              ;用or运算将后三位用al替代
														add bx, 2
														loop s2
														
														pop cx
														pop bx
														pop es
														pop ax
														ret
														
code ends
end start

当ah是0时:


当ah是1时:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值