王爽汇编语言 关于直接定址表 cs:[bx] 指向标号,偏移地址是两个字节,那为什么ah是一个字节?
编写一个子程序,计算sin(x),并在屏幕中间显示计算结果:用ax向子程序传递角度,程序如下:showsin:jmpshortshowtabledwag0,ag30,ag...
编写一个子程序,计算sin(x) ,并在屏幕中间显示计算结果:
用ax向子程序传递角度,程序如下:
showsin: jmp short show
table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180 ;字符串偏移地址表
ag0 db '0',0 ;sin(0)对应的字符串"0"
ag30 db '0.5',0 ; sin(30)对应的字符串"0.5"
ag60 db '0.866',0 ; sin(30)对应的字符串"0.866"
ag90 db '1',0 ; sin(30)对应的字符串"1"
ag120 db '0.866',0 ; sin(30)对应的字符串"0.866"
ag150 db '0.5',0 ; sin(30)对应的字符串"0.5"
ag180 db '0',0 ; sin(30)对应的字符串"0"
show: push bx
push es
push si
mov
mov bx,0b800h
mov es,bx
;以下用 角度值/30 作为相对table的偏移,取得对应的字符串的偏移地址,放在bx中
mov ah,0
mov bl,30 ;除以30 的原因是所求的角度以30度递增,得出的商刚好是:0,1,2,3,4,5,6-table
div bl ;加上相应商就可取得相应字符串偏移地址
mov bl,al
mov bh,0
add bx,bx ;作用:相当于(bx)=(bx)*2,因为table表中以dw定义数据为字型,占两个字节,所以
mov bx,table[bx] ;(bx)*2就可找到相应的存储字符串偏移地址的地址
;以下显示sin(x)对应的字符串
mov si,160*12+40*2
shows: mov ah,cs:[bx] // ?
cmp ah,0
je showret
mov es:[si],ah
inc bx
add si,2
jmp short shows
showret:pop si
pop es
pop bx
ret 展开
用ax向子程序传递角度,程序如下:
showsin: jmp short show
table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180 ;字符串偏移地址表
ag0 db '0',0 ;sin(0)对应的字符串"0"
ag30 db '0.5',0 ; sin(30)对应的字符串"0.5"
ag60 db '0.866',0 ; sin(30)对应的字符串"0.866"
ag90 db '1',0 ; sin(30)对应的字符串"1"
ag120 db '0.866',0 ; sin(30)对应的字符串"0.866"
ag150 db '0.5',0 ; sin(30)对应的字符串"0.5"
ag180 db '0',0 ; sin(30)对应的字符串"0"
show: push bx
push es
push si
mov
mov bx,0b800h
mov es,bx
;以下用 角度值/30 作为相对table的偏移,取得对应的字符串的偏移地址,放在bx中
mov ah,0
mov bl,30 ;除以30 的原因是所求的角度以30度递增,得出的商刚好是:0,1,2,3,4,5,6-table
div bl ;加上相应商就可取得相应字符串偏移地址
mov bl,al
mov bh,0
add bx,bx ;作用:相当于(bx)=(bx)*2,因为table表中以dw定义数据为字型,占两个字节,所以
mov bx,table[bx] ;(bx)*2就可找到相应的存储字符串偏移地址的地址
;以下显示sin(x)对应的字符串
mov si,160*12+40*2
shows: mov ah,cs:[bx] // ?
cmp ah,0
je showret
mov es:[si],ah
inc bx
add si,2
jmp short shows
showret:pop si
pop es
pop bx
ret 展开
3个回答
2012-09-25
展开全部
ah本来就一个字节,ah+al才是一个字
上面最后的例子里只是取了bx的高位存到ah里,然后ah清0,其实就是把bx的范围缩小到-128-127而已.
上面最后的例子里只是取了bx的高位存到ah里,然后ah清0,其实就是把bx的范围缩小到-128-127而已.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询