- [ce54605802] 经过我自己的测试,有问题,调试的时候出现除法溢出。需要改进 10/27 20:49
- [tinyparticle] 功能完成 10/14 18:39
- [tinyparticle] 正确 10/14 18:38
- [tinyparticle] 测试通过 10/14 18:38
- [tinyparticle] 理解没问题 10/11 14:49
- [ce54605802] 。。 “啥” 是东北方言 10/11 14:40
- [tinyparticle] 没啥问题。 10/11 14:26
- [younggay] 不错,加油。 10/10 13:33
- [ce54605802] 上去看了一下,真不错,网站也收藏了 我QQ是54605802 加下QQ吧,方便交流 10/09 23:15
- [tinyparticle] 加密与解密(第三版) 支持网站:http://bbs.pediy.com/index.php 10/09 23:09
- [ce54605802] 呵呵 你给加上0001H 有什么意义啊 加上 00FFH 试试啊 09/15 23:34
- [abob] 物理地址 等于 FFFF*16+FFFF 等于16FFE9,远远超过了20位数字 ------ 08/05 17:10
[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
答案 是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) |
类型(汇编作业) |
收藏此文 |