汇编语言:利用栈的特性对内存数据进行逆置
生活随笔
收集整理的這篇文章主要介紹了
汇编语言:利用栈的特性对内存数据进行逆置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題介紹
今天我們來解決這樣一個問題,利用棧的的特性,將代碼段中定義的數據進行逆序存放。請看下面代碼段:
assume cs:code code segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h;? code ends end start預備知識
代碼展示
assume cs:code code segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdw 0,0,0,0, 0,0,0,0start:;設置 棧段mov ax,csmov ss,axmov sp,20h;設置訪問內存單元 可以用段地址:偏移地址表示 偏移地址用寄存器存放 可變mov bx,0;設置 循環次數mov cx,8;先壓棧s:push cs:[bx]add bx,2loop smov bx,0 mov cx,8;后彈棧s1:pop cs:[bx]add bx,2loop s1mov ax,4c00hint 21h code ends end start
代碼討論
在匯編語言 王爽 書中的原代碼中,定義的是 16字單元,sp 是設置的 30h,猜想作者是申請更多空間,反正沒壞處。其實本人認為定義8個字單元足夠,我們需要逆置的數據也才8個字單元,如果申請8個字單元,那么sp的設置就要當心了,是空閑單元的最高地址+1,先移動到空閑單元然后開始壓棧!地址最高的空閑單元是sp = 19h ,所以 mov sp,20h 沒毛病,網上有說mov sp,21h 這是錯的。壓棧前sp指向代碼段第一條指令,sp 先-2 然后壓入1個字數據!
檢測結果
第一步查看內存單元數據。
第二步代碼運行到第一個循環(壓棧)結束,查看是否將內存單元的數值全部壓棧到空閑單元。
第三步代碼運行到第二個循環(彈棧)結束,查看內存單元數值是否逆置。
總結
以上是生活随笔為你收集整理的汇编语言:利用栈的特性对内存数据进行逆置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言:编程,将datasg段中的每个
- 下一篇: python:第一个简单爬虫程序