最近在看王爽的<汇编语言>,感觉理论与实践结合比较不错,是本学习汇编的好书
下面实现数据首尾交换:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0, 0, 0, 0, 0, 0, 0, 0
;
start: mov ax, 0 ;多加了两行
mov ax, 0
mov ax, cs
mov ss, ax
mov sp, 32
mov bx, 0
mov cx, 8
s:push cs:[bx]
add bx, 2
loop s
mov bx, 0
mov cx, 8
s0:pop cs:[bx]
add bx, 2
loop s0
mov ax, 4200h
int 21
codesg ends
end start
在实验过程中,要加两行mov ax, 0才达到实验的目的(数据交换),不知道为什么?
在有的实验中,经常加mov ax, 0才能实现数据正常保存在栈中,不知为什么?
我是用的tr调试工具,可能TR的BUG, debug没有此问题
************************************
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends
code segment
start: mov ax, 0
mov ax, 0
mov ax, stack
mov ss, ax
mov sp, 16
mov ax, data
mov ds, ax
mov bx, 0
mov cx, 8
s: push [bx]
add bx, 2
loop s
mov bx, 0
mov cx, 8
s0: pop [bx]
add bx, 2
loop s0
mov ax, 4200h
int 21
code ends
end start
************* run.bat ************************
del "%1.obj"
del "%1.exe"
ml /c /nologo "%1.asm"
doslnk "%1.obj"
阅读(1744) | 评论(2) | 转发(0) |