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

我的博客

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

[2023-08-10 09:15] 第 13 章 检测点 13.1

检测点 13.1


(1) 在上面的内容中,用 7ch 中断例程实现 loop 的功能,则上面的 7ch 中断例程所能进行的最大转移位移是多少?
答:由于存储位移数据的是 16 位的 BX 寄存器,而压栈后,栈元素也是 16 位的字内存单元,16 位存储空间所能存储的有符号数范围是 -32768~32767,因此最大位移就是 32767 字节(Byte)和 -32768 字节(Byte)。

(2) 实现用 7ch 中断例程完成“jmp near ptr s”指令的功能,用 BX 寄存器向中断例程传送转移的位移值 —— (bx) 成为调用中断例程的参数。

应用举例:在屏幕的第 12 行,显示 data 段中以 0 结尾的字符串。

assume cs:code

data segment
        db 'conversation',0
data ends

code segment

start:        mov ax,data
                mov ds,ax
                mov si,0
                mov ax,0B800h
                mov es,ax
                mov di,12*160
s:                cmp byte ptr [si],0
                je ok                                                ; 如果是 0,就跳出循环
                mov al,[si]
                mov es:[di],al
                inc si
                add di,2
                mov bx,offset s-offset ok  ; 设置从标号 ok 到标号 s 的转移位移:(bx)=offset s-offset ok
                int 7ch                                                ; 转移到标号 s 处
ok:                mov ax,4c00h
                int 21h

code ends

end start

7ch 中断例程实现“jmp near ptr s”指令功能的代码如下:
注意,由于在主调程序中已经对字符是否为结束符(ASCII 码值为 0)作出了判断,所以 7ch 中断例程中无需添加这一判断功能的代码,只需直接跳转至主调程序的 s 标号处即可。

jtos:        push bp
                mov bp,sp
                add [bp+2],bx
                pop bp
                iret
评论次数(0)  |  浏览次数(164)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码