【匯編語(yǔ)言實(shí)驗(yàn)一】搭建開(kāi)發(fā)環(huán)境

匯編語(yǔ)言系列文章僅作為實(shí)驗(yàn)報(bào)告和匯編學(xué)習(xí)參考黑忱,不作為任何技術(shù)文章烟具,還望大佬們勿噴席舍。

1. 實(shí)驗(yàn)名稱

搭建匯編語(yǔ)言的開(kāi)發(fā)環(huán)境布轿,熟悉匯編程序開(kāi)發(fā)的基本步驟,掌握基本的調(diào)試操作来颤。

2. 實(shí)驗(yàn)要求

基于VISUAL STUDIO 平臺(tái)汰扭,結(jié)合MASM32的匯編器,構(gòu)建IA-32匯編語(yǔ)言的開(kāi)發(fā)環(huán)境福铅。

3. 實(shí)驗(yàn)內(nèi)容

  1. VC6平臺(tái)下的匯編語(yǔ)言開(kāi)發(fā)環(huán)境搭建(使用MASM32的匯編器+VC6)
    配置IDE環(huán)境:
    – 在VC的tools/option/Directories頁(yè)面中添加Irvine32.inc等所在的目錄到include files中; 添加Irvine32.lib等所在的目錄到library files.
    – 將masm32中的ml.exe和ml.err拷貝到VC的Microsoft Visual Studio\VC98\Bin目錄中

創(chuàng)建與配置project:
– 新建VC的win32 console類(lèi)型空工程
– 創(chuàng)建一個(gè)asm后綴的文件萝毛,并把匯編代碼(教材第85頁(yè)addsub3.asm)輸入該文件中,然后將該asm文件添加到Source Files
– 選中asm文件滑黔,在project settings/Custom Build頁(yè)面中命令行加:
ml /c /coff /Fo(TargetDir)\(InputName).obj (InputPath) 輸出中加上:(TargetDir)$(InputName).obj
– “Project setting”頁(yè)面的”link”選項(xiàng)卡中“object/library module ”中加入irvine32.lib

  1. 匯編與鏈接不帶輸出的加減法程序(即教材第85頁(yè)addsubTest.asm)笆包;
  2. 在程序最后加入調(diào)用DumpRegs過(guò)程的語(yǔ)句,以輸出各寄存器的值略荡。
  3. 以單步執(zhí)行的方式調(diào)試該程序庵佣,查看每步結(jié)果,并解釋每步結(jié)果汛兜,并寫(xiě)成注釋巴粪。(特別注意對(duì)標(biāo)志位的影響)
  4. (可選)嘗試修改程序。
  5. (可選)單步跟蹤課件中4.3.3節(jié)的程序“ptr應(yīng)用示例”粥谬,結(jié)合VC6的內(nèi)存查看功能(通過(guò)菜單view?debug windows?Memory調(diào)出內(nèi)存查看窗口)理解每步的執(zhí)行結(jié)果肛根。(注意課件中只是大部分代碼,請(qǐng)補(bǔ)全頭文件以及程序退出宏漏策。)

4. 實(shí)驗(yàn)步驟或源代碼派哲、結(jié)果

1. 實(shí)驗(yàn)步驟

  1. 匯編與鏈接不帶輸出的加減法程序
1
  1. 在程序最后加入調(diào)用DumpRegs過(guò)程的語(yǔ)句,以輸出各寄存器的值
2
  1. 以單步執(zhí)行的方式調(diào)試該程序哟玷,查看每步結(jié)果狮辽,并解釋每步結(jié)果一也,并寫(xiě)成注釋。

EIP指向下一條將要執(zhí)行指令的地址喉脖,即00401010所在的mov指令椰苟。

mov指令把1000h賦給ax寄存器,ax=1000h所以EAX變?yōu)榱?06E1000树叽。

inc指令把a(bǔ)x加1舆蝴,所以ax的地址從1000變成了1001。

dec指令把a(bǔ)x減1题诵,所以ax的地址從1001變成了1000洁仗。

mov指令把SDWORD類(lèi)型的Xval賦給eax,由于Xval的大小是26性锭,16進(jìn)制下是1A赠潦,所以EAX為0000001A。

neg指令把EAX轉(zhuǎn)換成二進(jìn)制補(bǔ)碼草冈,將操作數(shù)的符號(hào)取反她奥,
00000000000000000000000000011010是正數(shù),二進(jìn)制補(bǔ)碼就是其本身怎棱,全部取反得再加1到11111111111111111111111111100110哩俭,即FFFFFFE6,十進(jìn)制為-26拳恋。

mov指令把SDWORD類(lèi)型的Yval賦給ebx凡资,由于Yval大小是30,30的16進(jìn)制就是1E谬运,ebx的值為0000001E隙赁。

sub指令把ebx的值減去Zval的值,由于Zval是SDWORD吩谦,且大小是40鸳谜,40的16進(jìn)制為28,Yval-Zval即0000001E+FFFFFFD8=FFFFFFF6式廷,所以ebx的值為FFFFFFF6咐扭。

add指令把ebx的值加到eax上,F(xiàn)FFFFFF6+FFFFFFE6=FFFFFFDC滑废,它的補(bǔ)碼的10進(jìn)制為-36蝗肪,所以Rval的值就是ax的值,為DC蠕趁。

mov指令把1賦給了cx薛闪,所以cx的值為0001,此時(shí)ZR=0俺陋。

sub指令cx的值減1豁延,cx的值變?yōu)?000昙篙,此時(shí)零標(biāo)志位ZR=1。

mov指令把0FFFFh賦給ax诱咏,所以ax的值為FFFF苔可。

inc指令把a(bǔ)x的值加1,即FFFF加上1袋狞,會(huì)進(jìn)位焚辅,得到0000。此時(shí)ZR=1苟鸯。

move指令把0賦給cx同蜻,所以cx的值為0000,PL=0早处。

sub指令把cx的值加1湾蔓,cx的值為0001,此時(shí)符號(hào)標(biāo)志位PL=1陕赃。

mov指令把7FFF賦給ax卵蛉,所以ax的值為7FFF。

add指令把a(bǔ)x的值加2么库,ax的值變成8001,此時(shí)PL=1甘有。

move指令把0FF賦給al诉儒,al的值為FF,ax的值為80FF亏掀,CY=0忱反。

add指令把a(bǔ)l的值加1,al變成00滤愕,此時(shí)進(jìn)位温算,所以進(jìn)位標(biāo)識(shí)符CY=1。

move指令把+127賦給al间影,al的值變成7F注竿,此時(shí)OV=0。

add指令把a(bǔ)l的值加1魂贬,al的值變成80巩割,此時(shí)溢出,溢出標(biāo)志位OV=1付燥。

move指令把-128賦給al宣谈,al的值變成80。

sub指令把a(bǔ)l的值減1键科,al的值變成7F闻丑,此時(shí)溢出漩怎,溢出標(biāo)志位OV=1。

2. 實(shí)驗(yàn)源代碼嗦嗡、結(jié)果

加上注釋后代碼是:

;加法和減法 (AddSubTest.asm)

include Irvine32.inc

.data
Rval SDWORD ?
Xval SDWORD 26
Yval SDWORD 30
Zval SDWORD 40

.code
main PROC
    ;INC和DEC
    mov ax, 1000h   ; ax = 1000h
    inc ax          ; ax = 1001h
    dec ax          ; ax = 1000h
    ; 表達(dá)式:Rval=-Xval+(Yval-Zval)
    mov eax, Xval   ; eax = 0000001a
    neg eax         ; -26
    mov ebx, Yval
    sub ebx, Zval   ; -10
    add eax, ebx    ; -36
    ; 零標(biāo)志位示例
    mov cx, 1       ; ZR = 0
    sub cx, 1       ; ZR = 1
    mov ax, 0FFFFh  ; 
    inc ax          ; ZR = 1
    ; 符號(hào)標(biāo)志位示例
    mov cx, 0       ; PL = 0
    sub cx, 1       ; PL = 1
    mov ax, 7FFFh
    add ax, 2       ; PL = 1
    ; 進(jìn)位標(biāo)志位示例
    mov al, 0FFh    ; CY = 0, AL = FF
    add al, 1       ; CY = 1, AL = 00
    ; 溢出標(biāo)志位示例
    mov al, +127    ; OV = 0
    add al, 1       ; OV = 1
    mov al, -128
    sub al, 1       ; OV = 1

    CALL DumpRegs
    INVOKE ExitProcess, 0
main ENDP
END main

5. 實(shí)驗(yàn)結(jié)論和心得體會(huì)

  • 再次加深了對(duì)通用寄存器和狀態(tài)標(biāo)志位的認(rèn)識(shí)勋锤;
  • 建工程時(shí)一定要建windows console application,不然編譯時(shí)會(huì)報(bào)錯(cuò)酸钦;
  • 調(diào)試時(shí)要注意寄存器和標(biāo)志位怪得,只要一步一步對(duì)應(yīng)著看,就能只能其工作的原理卑硫;
  • 在寫(xiě)匯編代碼時(shí)徒恋,代碼段是必須有有的,報(bào)錯(cuò)時(shí)要讀懂報(bào)錯(cuò)緣由欢伏,注意解決報(bào)錯(cuò)原因入挣;
  • 對(duì)于一些常用的操作指令要牢記,并且要理解其內(nèi)容和作用硝拧。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末径筏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子障陶,更是在濱河造成了極大的恐慌滋恬,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抱究,死亡現(xiàn)場(chǎng)離奇詭異恢氯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鼓寺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)勋拟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妈候,你說(shuō)我怎么就攤上這事敢靡。” “怎么了苦银?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵啸胧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我墓毒,道長(zhǎng)吓揪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任所计,我火速辦了婚禮柠辞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘主胧。我一直安慰自己叭首,他們只是感情好习勤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著焙格,像睡著了一般图毕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眷唉,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天予颤,我揣著相機(jī)與錄音,去河邊找鬼冬阳。 笑死蛤虐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肝陪。 我是一名探鬼主播驳庭,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼氯窍!你這毒婦竟也來(lái)了饲常?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狼讨,失蹤者是張志新(化名)和其女友劉穎贝淤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體政供,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霹娄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲫骗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踩晶,死狀恐怖执泰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渡蜻,我是刑警寧澤术吝,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站茸苇,受9級(jí)特大地震影響排苍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜学密,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一淘衙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腻暮,春花似錦彤守、人聲如沸毯侦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侈离。三九已至,卻和暖如春筝蚕,著一層夾襖步出監(jiān)牢的瞬間卦碾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工起宽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洲胖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓燎含,卻偏偏與公主長(zhǎng)得像宾濒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屏箍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.地址總線绘梦,數(shù)據(jù)總線,控制總線在哪里赴魁,它們有什么作用?答:它們都是cpu連接外部組件的線路卸奉。地址總線:地址總線A...
    MagicalGuy閱讀 1,462評(píng)論 0 1
  • 這個(gè)程序的核心目的是:試驗(yàn)大地址的讀寫(xiě),在保護(hù)模式下面尋址空間可達(dá)4GB颖御,實(shí)模式下只能尋址1MB榄棵。(why:為什么...
    王偵閱讀 821評(píng)論 0 0
  • # 常見(jiàn)匯編代碼 # 1. 編寫(xiě)程序:比較AX,BX,CX中帶符號(hào)數(shù)的大小,將最大的數(shù)放在AX中 code...
    喝豆腐腦加糖閱讀 2,622評(píng)論 0 0
  • 1. 堆棧操作 1). 運(yùn)行時(shí)棧 PUSH 操作 作用:32位PUSH操作將堆棧指針遞減4并將值復(fù)制到該位置堆棧指...
    _凌浩雨閱讀 2,342評(píng)論 0 5
  • Java原子類(lèi)中CAS的底層實(shí)現(xiàn) - GoldArowana - 博客園 Java原子類(lèi)中CAS的底層實(shí)現(xiàn) 從Ja...
    聽(tīng)一首老歌閱讀 687評(píng)論 0 1