|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
若在一片内存区域中有一数据块,起始地址为num。数据块中的数有正数有负数,要求把其中的正负数分开,分别放在同一段的两个缓冲区存放正数的缓冲区起始地址为plus_n,存放负数的缓冲区起始地址为minus_n。
执行后,plus_n 和minus_n处存储的数都是从偏移地址2处开始存储的,开始两个字节分别为10 00和00 00,这是为何?
data segment
num db 01h,10h,88h,0a4h,01eh,90h,40h,85h
db 0e8h,4fh,3ch,86h,87h,30h,20h,81h
count dw $-offset num
plus_n db 16 dup(?)
minus_n db 16 dup(?)
data ends
assume cs:code,ds:data,es:data
code segment
start: mov ax,data
mov ds,ax
mov es,ax
lea si,offset num
lea di,offset plus_n
mov bx,offset minus_n
mov cx,count
cld
go_on: lodsb
test al,80h
jnz min_s
stosb
jmp again
min_s: xchg di,bx
stosb
xchg di,bx
again: loop go_on
mov ax,4c00h
int 21h
code ends
end start
本帖最后由 jackz007 于 2025-3-28 13:43 编辑 这样定义 count 会实际占用 2 个字节,10 00 就是 count 的数值,所以,plus_n 和 minus_n 并不是从 076A : 0010 和 076A : 0020 处开始的,而是从 076A : 0012 和 076A : 0022 处开始的。现在再看你的数据,是不是就合理了?
要是想要自己预想的结果,那么,count 应该这样定义: 这样定义的 count 就不会占用内存了。
|
|