正在加载……
专注、离线、切勿分心
将 10000H~1000FH 中的8个字,逆序拷贝到 20000H~2000FH 中,在拷贝回去。
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 下面编译,必须前面加上显示的段寄存器


posted on 2017-11-30 20:03  正在加载……  阅读(133)  评论(0编辑  收藏  举报