主题:我发现用assume就不用手工赋段值了~
euc
[专家分:4310] 发布于 2006-02-07 10:48:00
这是我的第一个程序:
;my first asm program
dseg segment
x db '1'
dseg ends
sseg segment stack
db 100 dup (?)
sseg ends
cseg segment
assume cs:cseg, ds:dseg, ss:sseg
start:
mov bl, x
mov ah, 4ch
int 21
cseg ends
end start
编译连接都通过了!哈。只是运行时总出现“试图执行无效指令”……
回复列表 (共10个回复)
沙发
hm1024 [专家分:220] 发布于 2006-02-07 11:28:00
虽然编译能通过,但不手工段赋值,程序执行就有问题,数据段不确定。
板凳
euc [专家分:4310] 发布于 2006-02-07 14:38:00
是吗?可我赋段值后仍然是这个情况。
3 楼
hm1024 [专家分:220] 发布于 2006-02-07 15:57:00
你是怎么赋值的可以完整的写出来吗?
4 楼
euc [专家分:4310] 发布于 2006-02-07 16:27:00
……
start: mov ax, dseg
mov ds, ax
mov ax, sseg
mov ss, ax
……
这样
5 楼
erping [专家分:3660] 发布于 2006-02-07 18:50:00
exe 文件中的 ss 和 sp 值是由连接器确定的
6 楼
SonicLing [专家分:6260] 发布于 2006-02-07 21:02:00
assume是给汇编器看的,实际操作时需要手工赋值。
7 楼
hm1024 [专家分:220] 发布于 2006-02-09 09:56:00
楼上两位说到了点子上,我顶一下。
8 楼
tjufhl [专家分:0] 发布于 2006-02-11 21:57:00
用简化段定义就不用assume了
9 楼
ChicBoi [专家分:0] 发布于 2008-11-04 14:28:00
如果还是要手工操作,那ASSUME是不是可以不要啊?
10 楼
cnhanxiao [专家分:450] 发布于 2008-11-05 14:56:00
assume cs:cseg, ds:dseg, ss:sseg——这是给编译使用的;
程序中还要对段进行装填,因为很多指令都是按照默认段完成操作的。
比如: stosb——就是写al到ES:[DI],程序中不装填ES,那写到哪里去了???
小程序没必要设置堆栈段。
我来回复