汇编实验——地址表的使用

题目:

         刚学了汇编,网上也又找到一些解法,不过还是根据自己的想法写了一下。

        这道题目注意些细节,有些小知识点上课可能没有讲到,下面直接上代码

data segment
	;使用ds:dx方式访问字符串时(如中断09h),
	;系统会从数据段第dx位开始往后读到第一个’$’
	msg1 db 'The 1 Bit is 1$'
	msg2 db 'The 2 Bit is 1$'
	msg3 db 'The 3 Bit is 1$'
	msg4 db 'The 4 Bit is 1$'
	msg5 db 'The 5 Bit is 1$'
	msg6 db 'The 6 Bit is 1$'
	msg7 db 'The 7 Bit is 1$'
	msg8 db 'The 8 Bit is 1$'
	
	AddressTable dw s1, s2, s3, s4	;地址表
				 dw s5, s6, s7, s8	
data ends

code segment
	assume cs:code, ds:data

start:
	mov ax, data
	mov ds, ax	;设置段地址
	
	mov ax, 0
	mov bl, 00000100b	;设置 bl 中只有一位 1
	
again:	
	shr bl, 1	;逻辑右移一位
	inc al		;记录位移次数
	cmp bl, 0	;将右移后的bl与0进行比较
	jne again	;若bl右移为不0,则跳转回again
	
	dec al
	mov ah, 0
	shl al, 1
	mov bx, ax	;al自减后右移,ax赋值给bx
	jmp AddressTable[bx]	;通过地址表进行跳转

	s1: lea dx, msg1
		jmp s
	s2: lea dx, msg2
		jmp s
	s3: lea dx, msg3
		jmp s
	s4: lea dx, msg4
		jmp s
	s5: lea dx, msg5
		jmp s
	s6: lea dx, msg6
		jmp s
	s7: lea dx, msg7
		jmp s
	s8: lea dx, msg8
		jmp s
		
s:
	mov ax, 0900h	;9号中断,输出
	int 21h
	
	mov ax, 4c00h
	int 21h
	
code ends

end start

结果

        编写完成之后编译连接就可以了。

 

 

主要参考了两篇博客:汇编语言实验-地址表和移位 以及关于db伪指令的一些内容_离天九夜的博客-CSDN博客_汇编语言中db

汇编中的直接定址表_了不起的盖茨比。的博客-CSDN博客_汇编地址表

第二篇中讲的很详细,可以看一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值