题目要求
用push指令将a段中的前8个字形数据,逆序存储到b段中
执行过程
push之前
a段数据
(b段数据)栈空间↓ 不要问我为什么不全是0,我并不知道,只是找出了一些规律。详见我的前一篇博客
“明明定义了栈仍然no stack segment 以及栈空间数据被篡改问题”
https://blog.csdn.net/sinat_42483341/article/details/88665331
循环push之后
成功将a段中的前8个字形数据,逆序存储到b段中,程序结束
代码
;用push指令将a段中的前8个字形数据,逆序存储到b段中
;1个字占4个16进制位,占2个存储空间
;8个字占16个存储空间,因此,栈底指针指向18(十六进制10)?
assume cs:code,ds:a,ss:b
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment stack
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
;让数据段寄存器ds指向a的地址
mov ax,a ;运行后,a的地址是076a:0000
mov ds,ax
;让栈段寄存器ss指向b的地址,sp指向栈底-2
mov ax,b ;运行后,b的地址是076c
mov ss,ax
mov sp,10h ;sp指向十进制的18
;循环push8次
mov cx,8h
mov bx,0h
s: mov ax,ds:[bx] ;让ax临时存放a中数据
push ax ;将ax中数据push进栈b中
add bx,2 ;偏移+=2
loop s
mov ax,4c00h
int 21h
code ends
end start