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

我的博客

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

[2009-10-09 21:49] 检测点13.1

图片载入中
问题1  7CH所以能进行的最大转移位移是多少
答案  是BX能表示的最大有符号型数据的最小有符号型数据之差
       也就是 -32768到32767

问题2 编写中断例程 模仿jmp near ptr s


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;安装程序:
assume cs:code
;安装程序分为2部,先把程序段复制到目标处
;第二部是在向量表中添加程序的地址
;首先来第一步,用的是rep movsb这个命令
;他需要几个参数,  es,目标的段地址di目标的偏移
;                  ds,安装源的段地址si安装源的偏移
;                  CX,安装源的长度 cld/std方向的正反
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset jpns       ;jpns是子程序的标签,SI的值是jpns的标签 这是rep movsb的参数
mov ax,0
mov es,ax            ;es设置为0 这是 rep movsb 目标的段地址
mov di,200h          ;设置 目标的偏移
mov cx,offset jpnsend-offset jpns   ;设置CX的长度
cld
rep movsb                ;传递完毕
;第二部 设置 7ch表指向0:200h

mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h      ;偏移地址
mov word ptr es:[7ch*4+2],0       ;使用的公式 向量表指向的中断例程的
                                  ;偏移地址是0:[n*4]
                                  ;段地址是  0:[n*4+2]
mov ax,4c00h
int 21h

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;中断例程,模仿jmp near ptr s
;参数是bx,bx是一个16位的位移
jpns:
push bp
mov bp,sp    ;栈的位置传送给了BP
add [bp+2],bx  ;BX是位移传送给BP指向的位置 
              ; 这个时候 
              ;[BP]的位置是之前压入的bp
              ;[BP+2]的位置是之前压入的ip
              ;[BP+4]的位置是之前压入的CS
              ;[BP+6]的位置是之前压入的标志寄存器
pop bp    ;还原bp
iret      ;返回,这个时候 CS:ip指向了S达到了jmp near ptr s 的功能
jpnsend:
nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
code ends
end start
评论次数(1)  |  浏览次数(579)  |  类型(汇编作业) |  收藏此文  | 

[  younggay   发表于  2009-10-10 13:33  ]

不错,加油。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码