汇编语言(王爽)16章直接定址表和查询部分度数的sin值

  1. a=ds:[si],那么a[sp]=ds:[si+sp]
  2. dw a,b=dw offset a,offset b
  3. a,b=dw offset a,seg a,offset b,seg b
assume cs:code,ds:data			;ds=076a
data segment
	db 9,9,9,9 					;09 09 09 09
	a dw 1234h,2345h			;34 12 45 23
	b dd 3456h					;56 34 00 00
	d dw a,b					;04 00 08 00
	e dw offset a,offset b		;04 00 08 00
	f dd a,b					;04 00 6A 07 08 00 6A 07	
	g dd offset a,offset b		;04 00 00 00 08 00 00 00
	h dw offset a,seg a,offset b,seg b		;04 00 6A 07 08 00 6A 07
data ends
code segment
	start:  
		mov ax,data		;//默认段地址是ds但a和b在data里,所以必须设置ds
		mov ds,ax
		mov si,0
	s:		
		mov ax,a[si]
		add word ptr b,ax
		;add word ptr b[2],ax		;//加在56 34 00 00的00 00上
		;add word ptr b[1],ax		;//加在56 34 00 00的34 00上
		adc word ptr b[2],0
		add si,2
		loop s

		mov ax,4c00h
		int 21h
code ends
end start

(重要)查询部分度数的sin值:

assume cs:code,ds:data
data segment	
	table dw v0,v30,v60,v90,v120,v150,v180
	v0    db '0','$'
	v30   db '0.5','$'
	v60   db '0.886','$'
	v90   db '1','$'
	v120  db '0.886','$'
	v150  db '0.5','$'
	v180  db '0','$'
data ends
code segment
	start:  
		mov ax,data
		mov ds,ax
		mov ax,120
		call sin

		mov ax,4c00h
		int 21h
	sin:
		push dx
		push ax
		push si
		mov dl,30
		div dl
		;mov dx,2					;//table dw,所以乘以2
		;mul dx
		mov ah,0
		mov si,ax
		add si,si					;//或者用上面的乘法
		;//si=8,table[8]=offset v120,所以dx=table[si]即可
		mov dx,table[si]			
		mov ah,9
		int 21h
		pop si
		pop ax
		pop dx
		ret
code ends
end start

注意b和offset b的区别

b时b[0]处的值,offset b是偏移量

assume cs:code,ds:data
data segment
	a db 'abc'				;//61 62 63 34 12 00 00 00
	b dw 1234h
data ends
code segment
	start:  
		mov ax,data
		mov ds,ax
		mov ax,b			;//b=b[0],这句代码=mov ax,b[0],所以ax=1234
		mov bx,offset b		;//bx=0003
		inc b				;//61 62 63 35 12 00 00 00
		mov ax,b			;//ax=1235
		mov bx,offset b		;//bx=0003

		mov ax,4c00h
		int 21h
code ends
end start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值