【第十六章】直接定址表

assume cs:code
code segment
start: mov ax,30
call showsin
mov ax,4c00h
int 21h
showsin: jmp short show
table dw sg0,sg1,sg2,sg3
sg0 db '0',0
sg1 db '0.5',0
sg2 db '0.866',0
sg3 db '1',0
show: push bx
push es
push si
mov bx,0b800h
mov es,bx
;确定定址表中下标,将下标中存储的元素(数据的偏移地址)放入bx中
mov ah,0
mov bl,30
div bl
mov bl,al
mov bh,0
add bx,bx
mov bx,table[bx]
;判断是否等于0,若等于0则结束循环
mov si,10*160 + 10*2
shows: mov ah,cs:[bx]
cmp ah,0
je showret
mov es:[si],ah
add si,2
inc bx
jmp short shows
showret: pop si
pop es
pop bx
ret
code ends
end start