代码如下,写的是把数据段里的值,先保存到栈段,然后再从栈段弹出来,放回数据段,执行完后,数据段里的数据,反过来了。
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,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,4c00h
int 21h
code ends
end start
用masm和link生成exe,然后debug
输入u,显示汇编指令
输入r,显示寄存器内容和下一步的汇编指令
输入t,进行单步调试,并显示寄存器内容和下一步的汇编指令
输入g 0010,显示执行到18D3:0010处的指令mov cx,0008前的寄存器内容
输入d ds:0,显示数据段 + 偏移0处及其后面的数据
如图所示,第一行的数据,就是程序中的数据段中的数据
输入d ss:0,显示栈段 + 偏移0处及其后面的数据
输入g 001a,这样就执行完第一个循环了,然后输入d ss:0,显示栈里的数据
看第一行,数据段中的数据,已经被依次压入栈中了,然后看看执行完第二个循环后的结果
输入g 0027,然后是d ds:0,然后是d ss:0
看,数据段中的数据,已经反过来了。
输入t,单步运行到21H号中断
输入p,运行中断,并结束程序
输入q,退出debug
上面的一些DEBUG命令,是我目前经常用到的。大学里学过汇编语言,但是已经忘了很多了,现在复习一下,顺便记录下来,供以后回忆。