汇编网首页登录博客注册
zwz_good的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
友情链接

[2009-10-13 21:31] 16.3直接定址表 例题计算sin(x),并在屏幕中间显示计算结果

图片载入中
assume cs:code, ds:data
data segment
  dw 0, 30, 60, 90, 120, 150, 180, 270
data ends

code segment
start:
  mov ax, data
  mov ds, ax
  mov si, 0
  mov cx, 8
s:
  mov ax, [si]
  call showsin
  call delay
  add si, 2
  loop s
  mov ax, 4c00h
  int 21h
delay:
  push ax
  push dx
  mov ax, 0h
  mov dx, 0h
delay0:
  sub ax, 1
  sbb dx, 0
  cmp ax, 0
  jne delay0
  cmp dx, 0
  jne delay0
  pop dx
  pop ax
  ret
;用ax传递角度
showsin:
  jmp short show
  table dw ag0, ag30, ag60, ag90, ag120, ag150, ag180, agError ;字符串偏移地址表
  ag0 db '0', 0
  ag30 db '0.5', 0
  ag60 db '0.866', 0
  ag90 db '1', 0
  ag120 db '0.866', 0
  ag150 db '0.5', 0
  ag180 db '0', 0
  agError db 'angle error!', 0 ;此处添加了错误处理
show:
  push bx
  push es
  push si
  push cx

  mov bx, 0b800h
  mov es, bx
  
  mov bl, 30
  div bl
  mov ah, 0
  mov bx, ax
  add bx, bx
  cmp bx, 12
  jna show0
  mov bx, 14
show0:  
  mov bx, table[bx]
  ;清屏
  mov cx, 8
  mov si, 160*12+40*2
show1:
  mov word ptr es:[si], 0
  add si, 2
  loop show1
  mov si, 160*12+40*2
shows:
  mov ah, cs:[bx]
  cmp ah, 0
  je showret
  mov es:[si], ah
  mov es:[si+1], bl 
  inc bx
  add si, 2
  jmp short shows
showret:
  pop cx
  pop si
  pop es
  pop bx
  ret
code ends
end start
评论次数(0)  |  浏览次数(469)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码