. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->INT指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  mov bx,offset s - offset se;这里是差值,为负值  [已解决] 回复[ 5次 ]   点击[ 439次 ]  
wscjsh
[帖 主]   [ 发表时间:2012-07-15 22:24 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:31
注册日期:2007-08-16 23:26
mov bx,offset s - offset se;这里是差值,为负值
为什么不写成
mov bx offset se-offset s
================================================
为什么这句是从下向上减。
mov cx,offset lpend - offset lp

========================

有时是从代码行号的上面再下减。有时是从代码行的下面向上减。是什么时候用。区别是什么。
chinatree
[第1楼]   [ 回复时间:2012-07-15 23:41 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
楼主说的有些不明白,至少我不记得这些标号是在哪个例子中出现。一般都是拿高地址减低地址。如果真的反了,要么看下书上是否有说为何反,要么去技术广场的错误报告厅看看。
fpamc
[第2楼]   [ 回复时间:2012-07-16 08:25 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36
从下往上减,是算得两标号间的字节数
从上往下减,是算得的位移量。值为负数。如果加上下边那个标号,(大数+负数)就可以回到地址第一个标号。你把13.3重新看几遍。看懂为止。你的概念模糊。会影响后边的。
wscjsh
[第3楼]   [ 回复时间:2012-07-17 02:10 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:31
注册日期:2007-08-16 23:26
回复:[第1楼]
------------------
assume cs:codesg  
codesg segment  
    start:  
    mov ax,cs  
    mov ds,ax  
    mov si,offset lp  
      
    mov ax,0  
    mov es,ax  
    mov di,0200h  
      
    mov cx,offset lpend - offset lp  
    cld  
    rep movsb  
      
    mov word ptr es:[7ch*4],0200h  
    mov word ptr es:[7ch*4+2],0000h  
 ;;;;;;;;;;以上代码实现了将中断例程拷贝到0000:0200开始的地址处,并设置了中断向量表项;;;;;;;;;;;;;;;;;   
      
      
      
    mov ax,0b800h  
    mov es,ax  
    mov di,12*160+40;显存的段地址  
      
    mov bx,offset s - offset se;这里是差值,为负值。  
    mov cx,5  
      
  s:mov byte ptr es:[di],'l'   
    mov byte ptr es:[di+1],0a0h  
    add di,2  
    int 7ch;调用中断例程  
 se:nop  
   
    mov ax,4c00h  
    int 21h  
  
 lp:push bp  
    mov bp,sp  
    dec cx  
    jcxz lpret  
    add [bp+2],bx ;change the ip's value  
      
lpret:  
    pop bp  
    iret  
lpend:nop  
      
codesg ends  
end start
fpamc
[第4楼]   [ 回复时间:2012-07-17 09:12 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36
add [bp+2],bx ;change the ip's value   

你知道此处的值是多少吗?

就是se标号的偏移地址。
s - se的值你知道是负数吧。
具体含义就是标号s到se的字节数的补码。
给你一例子。

2-5=-3
那么
5+(-3)=2

这个能明白么?
和s-se的道理一样。
后面通过用se标号的偏移值加上那个补码。就会回到s标号,从而实现跳转。。

你好好看书,思维别以为自己的就是对的那么死板。。
wscjsh
[第5楼]   [ 回复时间:2012-07-17 09:14 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:31
注册日期:2007-08-16 23:26
此贴由 贴主 于 [ 2012-07-17 09:14 ] 结贴。 结贴原因:问题已解决
得分情况: 2楼(fpamc):3分   4楼(fpamc):3分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved