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

我的博客

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

[2012-05-06 20:57] 实验十三(一)

图片载入中
第十三章
检测点13.1
(1)
7ch中断例程如下:
lp: push bp
 mov bp,sp
 dec cx
 jcxz lpret
 add [bp+2],bx
lpret: pop bp 
 iret
 (1)在上面的内容中,我们用7ch中断例程实现loop的功能,则上面的7ch中断例程所能进行的最大转移位移是多少?

最大位移是FFFFH
因为,bx最大值为ffffh

(2)
用7ch中断例程完成jmp near ptr s指令功能,用bx向中断例程传送转移位移。
把loop指令功能的中断例程中的指令换成如下就行了:
push bp
mov bp,sp
add [bp+2],bx
pop bp
iret

检测点13.2
判断下面说法的正误:
(1)我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。

答:错误,FFFF:0处的内容无法改变。

(2)int 19h中断例程,可以由DOS提供。

答:错误,顺序是先调用int 19h,后启动DOS。





;名称:int 7ch中断例程安装
;参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。
;功能:显示一个用0结束的字符串,中断例程安装在0:200h处

assume cs:code
code segment
start:mov ax,cs
  mov ds,ax
  mov si,offset sh
  
  mov ax,0
  mov es,ax
  mov di,200h
  
  mov cx,offset shend - offset sh
  cld
  rep movsb
  
  mov word ptr es:[7ch*4],200h
  mov word ptr es:[7ch*4+2],0
  
  mov ax,4c00h
  int 21h
  ;以上是为安装中断例程做准备。
  
sh:  push ax
     push es
  push dx
  push si
  push di                ;保存需要用到的寄存器

     mov ax,0b800h
  mov es,ax              ;设置显存段
  
  mov al,0a0h
  dec dh                 ;因为计算机从0开始记录行数,所以减一
  mul dh
  mov di,ax              ;将计算好的行,放到di中
  
  mov al,2
  dec dl                 ;与行数同理
  mul dl
  add di,ax              ;将计算好的列,与行相加
  
  mov ah,cl              ;将字符属性放到ah中
  
sh1: cmp byte ptr [si],0
  je she                 ;若为零,则转移到she
  
  mov al,[si]
  mov es:[di],ax
  inc si
  add di,2
  jmp sh1                ;此段为传送字符串和字符属性
  
she: pop di
     pop si
  pop dx
  pop es
  pop ax                 ;还原寄存器
  iret                   ;中断返回
  
shend:nop

code ends
end start
评论次数(2)  |  浏览次数(694)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2012-05-06 22:38  ]

完成地没问题。

[  ltoiii   发表于  2012-12-09 12:09  ]

既然是实现loop功能,是否要考虑s和se标号?
mov bx,offset s - offset se
bx: -32768~32767
这里s<se,所以理论上bx取负-32768~?(取决于s和se标号之间语句长度),则最大转移位移取绝对值32768

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