. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->INT指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  疑点求助  [待解决] 回复[ 3次 ]   点击[ 536次 ]  
huangfei777528
[帖 主]   [ 发表时间:2008-05-01 14:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-21 20:00
书中p245处的7ch中断例程不明白:
其要求在屏幕中间显示80个‘!’程序如下
assume cs:code
code segment
  start:mov ax,0b800h
        mov es,ax
        mov di,160*12
        mov bx,offset s-offset se
        mov cx,80
    s:  mov byte ptr es:[di],'!'
        add di,2
        int 7ch
    se: nop
        mov ax,4c00h
        int 21h
code ends
end start

7ch:
    lp: push bp
       mov bp,sp
       dec cx
       jcxz lpret
       add [bp+2],bx
  lpret:pop bp
        iret
我的问题是:1、add di,2中di 为什么要加2呀?
            2、为什么是add [bp+2],bx而不是sub [bp+2],bx 我觉得应该减才对呀
            3、bp与sp的用途是一样吗? bp的初始值是多少呀,为什么要入栈?
学习ing,遇到不少麻烦,还请各位大侠帮忙解决,也祝各位大侠节日快乐!!!!
younggay
[第1楼]   [ 回复时间:2008-05-02 14:24 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
楼主一路学过来是不是一个程序都没有动手编写呢??
1、add di,2中di 为什么要加2呀? 
-------
显示一个字符对应显存两个字节,低字节放ascii码,高字节放属性值。

2、为什么是add [bp+2],bx而不是sub [bp+2],bx 我觉得应该减才对呀 
===================
bp默认的段地址是ss,栈的操作过程中是将sp减少,而bp是sp的值,当寻找之前入栈的数据的时候,当然应该是add了。

3、bp与sp的用途是一样吗? bp的初始值是多少呀,为什么要入栈? 
============
bp就是一个寄存器,在寻址的时候默认的段地址寄存器是ss。这跟bx默认的是ss一样。其他的使用方式方法个bx等寄存器没有什么区别的。

建议楼主学习过程中还是要编程序,这些内容本来是一开始的基础知识,没有掌握牢固,那你学习的最后效果也不会很好的。
huangfei777528
[第2楼]   [ 回复时间:2008-05-02 22:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-21 20:00
younggay说的一点不错,我是没有编写一个程序,都是自己看别人的程序,谢谢你提醒,以后我会注意的!
ltoiii
[第3楼]   [ 回复时间:2012-12-08 17:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-23 14:04
这跟bx默认的是ss一样。
==============
是不是想说"bx默认的段寄存器是ds一样"?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved