编程

将 10000H~1000FH 中的8个字,逆序拷贝到 20000H~2000FH 中,在拷贝回去。
ASTIA77jBM9vAAAAAElFTkSuQmCC
mov ax , 1000
mov ds , ax
mov ax , 2000
mov ss , ax
mov sp , 0010
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]
mov ax , 2000
mov ds , ax
mov ax , 1000
mov ss , ax
mov sp , 0010
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]


mov ax , ffff
mov ds , ax
mov ax , 2200
mov ss , ax
mov sp , 0100
mov ax , [0]          ; ax=C0EA    ; ffff:0000 处的值
add ax , [2]         ;ax=C0FC
mov bx , [4]         ; bx=30F0
add bx , [6]          ; bx=6021
push ax                ; sp=00FE ; 修改的内存单元地址是 220FE 内容为 C0FC
push bx               ; sp=00FC ; 修改的内存单元地址是 220FD 内容为 6021
pop ax                 ; sp=00FE ;   ax=6021
pop bx                ; sp=0100 ;   ax=C0FC
push [4]              ; sp=00FE ; 修改的内存单元地址是 220FE  内容为 30F0
push [6]              ; sp=00FC ; 修改的内存单元地址是 220FC 内容为 2F31


assume cs:code , ds:data , ss:stack
data segment
        dw 0123h , 0456h , 0789h , 0abch , 0defh , 0fedh , 0cbah , 0789h
data ends
stack segment
        dw 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
stack ends
code segment
start:  mov ax , stack
           mov ss , ax
           mov sp , 16
           mov ax , data
           mov ds , ax
           push ds:[0]
           push ds:[2]
           pop ds:[2]
           pop ds:[0]
           mov ax , 4c00h
           int 21h
code ends
end start
程序加载进内存,系统就为开头定义的数据分配内存空间并写入数据;
设置 CS:IP 指向start处的第一条指令开始执行。
要查看前面的数据存放在那,就要用 -d cs-1:0 ;

 
push、pop如果在masm 下面编译,必须前面加上显示的段寄存器


转载于:https://www.cnblogs.com/meihao1203/p/7931054.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值