- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56
[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
检测点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) |
类型(汇编作业) |
收藏此文 |