. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于标号的一些我的认识  [已解决] 回复[ 3次 ]   点击[ 550次 ]  
xijietianxia
[帖 主]   [ 发表时间:2009-01-04 12:25 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:11
注册日期:2008-11-28 16:49
实验16在我还没有做的时候觉得这不就是把前面的代码打一次吗,结果我打了一次发现我错了。。。,书上的题目不会搞个这么无聊的事情。
这个实验主要是标号问题,数据标号有段属性和偏移属性,当程序段被转移,段被改变(table在code段中table的cs被改变为20),但他在原程序的相对于段的偏移没有改变(程序段移动之后table数据标号为cs:002a,和所希望的
cs:0002不相同,table不能被随便引用,故我的程序不能用call word ptr table[bx])。
但是我想标号的引用可以在被转移的程序段中使用,是因为跳转都是用的相对位移
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset s0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset s0end-offset s0
cld
rep movsb
mov word ptr es:[7ch*4],0
mov word ptr es:[7ch*4+2],20h
mov ax,4c00h
int 21h
s0:
 jmp short s00
 table dw offset g0-offset s0,offset g1-offset s0,offset g2-offset s0,offset g3-offset  s0   ;相对s0的位移
s00:
 push bx
 cmp ah,3
 ja ok
 mov bl,ah
 mov bh,0
 add bx,bx
 call word ptr cs:2h[bx] ;就是这里害我好惨
ok: 
 pop bx
 iret
g0:
 push bx
 push cx
 push es
 mov bx,0b800h
 mov es,bx
 mov bx,0
 mov cx,2000
g01:
 mov byte ptr es:[bx],' '
 add bx,2
 loop g01
 pop es
 pop cx
 pop bx
 ret
g1:
 push bx
 push es
 push cx
 mov bx,0b800h
 mov es,bx
 mov bx,1
 mov cx,2000
g11:
 and byte ptr es:[bx],11111000b
 or es:[bx],al
 add bx,2
 loop g11
 pop cx
 pop es
 pop bx
 ret
g2:
 push bx
 push es
 push cx
 mov bx,0b800h
 mov es,bx
 mov bx,1
 and byte ptr es:[bx],10001111b
 shl al,1
 shl al,1
 shl al,1
 shl al,1
 mov cx,2000
g21:
 or es:[bx],al
 add bx,2
 loop g21 
 pop cx
 pop es
 pop bx
 ret
g3:
 push si
 push es
 push ds
 push cx
 mov si,0b800h
 mov es,si
 mov ds,si
 mov di,0
 mov si,160
 mov cx,24
g31:
 push cx
 mov cx,160
g32:
 rep movsb
 inc di
 inc si
 loop g32
 pop cx
 loop g31
 mov cx,80
 mov si,0
g33:
 mov byte ptr [160*240+si],' '
 add si,2
 loop g33
 pop cx
 pop ds
 pop es
 pop si
 ret
 s0end:
 nop
code ends
end start
mess
[第1楼]   [ 回复时间:2009-01-05 12:58 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
这也是想做一个通用子程序常遇到的一个问题,可以想象系统提供的中断里面肯定也遇到了这些问题 ^_^
xijietianxia
[第2楼]   [ 回复时间:2009-01-25 13:39 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:11
注册日期:2008-11-28 16:49
过年了要结贴了
xijietianxia
[第3楼]   [ 回复时间:2009-01-25 13:40 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:11
注册日期:2008-11-28 16:49
此贴由 贴主 于 [ 2009-01-25 13:40 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(mess):4分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved