汇编语言结课作业
兩個一位數(shù)相加
1.設(shè)計概述
從鍵盤輸入兩個一位十進(jìn)制數(shù),計算兩個數(shù)之和,并將結(jié)果在屏幕上顯示出來。
2.設(shè)計環(huán)境
硬件:操作系統(tǒng) Windows 10 64位(Version 2009 / DirectX 12)
處理器 英特爾 Core i5-8300H @ 2.30GHz 四核
主板 華碩 FX505GM(HM370 芯片組)
顯卡 NVIDIA GeForce GTX 1060 ( 6 GB / 華碩 )
內(nèi)存 16 GB ( 三星 DDR4 2666MHz )
主硬盤 西數(shù) WDC PC SN520 SDAPNUW-256G-1002 ( 256 GB / 固態(tài)硬盤 )
顯示器 京東方 BOE0747 ( 15.5 英寸 )
聲卡 瑞昱 @ 英特爾 High Definition Audio 控制器
網(wǎng)卡 英特爾 Wireless-AC 9560
軟件:操作系統(tǒng):Windows 10
開發(fā)語言:emu8086 4.08 匯編和微處理器仿真器 或 masm 5.0
3.設(shè)計思路
首先,設(shè)計輸入輸出提示語句,在start中分別輸入第一個數(shù)字和第二個數(shù)字并分別減去48儲存在AL,BL中.然后利用ADD指令和AAA指令,進(jìn)行相加和加法ASCII碼調(diào)整指 最后,2號系統(tǒng)調(diào)用,單個輸出結(jié)果。
4.流程圖
5.運(yùn)行結(jié)果及分析
通過幾次實驗運(yùn)行結(jié)果看出,十以內(nèi)數(shù)字相加不會出現(xiàn)差錯,運(yùn)行速度也非常快.
6.心得體會
在接觸這門課程初始,就感到匯編語言并不是很容易就可以弄懂的。相比較以前學(xué)過的程序語言如C、C++等,電腦等于在遷就人的思維方式,但匯編卻是接近機(jī)器語言的一門語言,我們學(xué)習(xí)和編寫程序時必須要去遷就電腦的思維方式,要設(shè)身處地地用電腦的角度去思考問題,這就是我學(xué)習(xí)匯編語言時感受最深的地方,想起來很簡單,寫起來相當(dāng)?shù)牟灰住R編的學(xué)習(xí)不僅僅是學(xué)習(xí)其語法,而更多的是學(xué)習(xí)計算機(jī)基本的體系結(jié)構(gòu)。其中遇到很多新的概念,名字。如寄存器、中斷、尋址方式等。這些概念在剛接觸匯編這門課的時候難以理解,但在之后的學(xué)習(xí)中通過老師的講解,自己親手編程的方式也就漸漸清晰明了。我們在學(xué)習(xí)之前都需要明確什么是匯編語言。計算機(jī)能夠直接識別的數(shù)據(jù)是由二進(jìn)制數(shù)0和1組成的代碼。機(jī)器指令就是用二進(jìn)制代碼組成的指令,一條機(jī)器指令控制計算機(jī)完成一個基本操作。
為了克服機(jī)器語言的缺點(diǎn),人們采用助記符表示機(jī)器指令的操作碼,用變量代替操作數(shù)的存放地址等,這樣就形成了匯編語言。經(jīng)過一個學(xué)期的學(xué)習(xí),我也慢慢摸出了匯編學(xué)習(xí)的規(guī)律。首先,學(xué)習(xí)這門語言時如果能聯(lián)系上以前學(xué)過的其他高級語言的知識,最重要的是一些思考問題,實現(xiàn)功能的邏輯的思考,會幫助我們很快的找到編寫程序的思路和方向。例如C語言程序的運(yùn)行邏輯結(jié)構(gòu)有順序(按語句依次執(zhí)行)、分支結(jié)構(gòu)(IF…THEN…ELSE…),循環(huán)結(jié)構(gòu)(FOR…NEXT)三種結(jié)構(gòu),也通過C語言了解并掌握了什么是子程序,什么是調(diào)用。事實上,匯編語言中有關(guān)程序結(jié)構(gòu),子程序等等的知識都是跟C語言十分相似的,只是在編程時用到的語言不同:匯編語言完全面向機(jī)器,需要指明數(shù)據(jù)在寄存器、內(nèi)存中的流向。第二,學(xué)習(xí)匯編語言,首要問題是學(xué)習(xí)80X86指令系統(tǒng)。如果能將指令系統(tǒng)中的各個助記符、格式等都能完全掌握并靈活運(yùn)用,大部分工作就已經(jīng)完成了。指令系統(tǒng)確定了CPU所能完成的功能,是用匯編語言進(jìn)行程序設(shè)計的最基本部分。如果不熟悉匯編指令的功能及其有關(guān)規(guī)定,那肯定不能靈活使用匯編語言。指令的種類十分繁雜,但其格式卻是統(tǒng)一的。其中方括號中的內(nèi)容為可選項。指令助記符決定了指令的功能,對應(yīng)一條二進(jìn)制編碼的機(jī)器指令。指令的操作數(shù)個數(shù)由該指令確定,可以沒有操作數(shù),也可以有一個或多個操作數(shù),大多數(shù)指令要顯示寫出來,還有些操作數(shù)是隱含的。
當(dāng)指令包含操作數(shù)的時候,書寫時必須遵守:1、指令助記符和操作數(shù)之間有分隔符,比如幾個空格;2、如果含有多個操作數(shù),操作數(shù)之間用逗號分隔。現(xiàn)在簡單總結(jié)匯編語言指令的分類:1、數(shù)據(jù)傳送指令;2、標(biāo)志位操作指令;3、算術(shù)運(yùn)算指令;4、邏輯運(yùn)算指令;5、移位運(yùn)算指令;6、位操作指令;7比較運(yùn)算指令;8、循環(huán)指令;9、轉(zhuǎn)移指令;10、條件設(shè)置字節(jié)指令;11、字符串操作指令;12、BCD碼運(yùn)算調(diào)整指令;13、處理器指令。在編寫匯編程序時,應(yīng)該注意特別容易出現(xiàn)的錯誤,例如在編寫數(shù)據(jù)傳送指令時,目的操作數(shù)和源操作數(shù)的類型一定要匹配,CS不能作為目的操作數(shù),offset后只能跟簡單地址符號,等等。匯編語言的尋址方式有直接尋址,寄存器尋址,基址變址尋址,相對基址變址尋址等等,掌握這些都是編寫匯編程序很重要的環(huán)節(jié)。匯編語言中的程序結(jié)構(gòu),子程序等知識也會幫助我們編寫出一個更加完善的匯編程序。另外,我們還應(yīng)該掌握DOS系統(tǒng)功能調(diào)用,宏匯編等知識。這里要對子程序和宏匯編加以區(qū)分,我的理解是:子程序是調(diào)用,而宏是替換,比如一個MAX宏,所有出現(xiàn)MAX的地方,都用宏代碼代替。在學(xué)習(xí)匯編語言時,指令的功能是學(xué)習(xí)和掌握的重點(diǎn),要準(zhǔn)確有效并合理的使用這些指令,必須了解一些使用的規(guī)則。現(xiàn)對匯編語言編程時的規(guī)則進(jìn)行總結(jié),歸納起來有三點(diǎn):1、要求指令操作數(shù)的尋址方式;2、指令對標(biāo)志位的影響和標(biāo)志位對指令的影響;3、指令的執(zhí)行時間,對可完成同樣功能的指令,要選用執(zhí)行時間短的指令。還有一點(diǎn)十分重要。和所有的程序設(shè)計語言一樣,要學(xué)好匯編語言,實驗是必不可少的環(huán)節(jié)。我們深有體會:書上的程序都能看懂,基本原理也都明白,但是在自己親手編寫程序時,卻無從下手,甚至連第一句該怎么寫都不知道。通過實驗,可以在很大程度上加深印象。
在書上看程序,一切都是理所當(dāng)然,十分順利,而自己動手,才會真正發(fā)現(xiàn)自己的不足之處。程序的編寫在記事本中進(jìn)行即可,掌握debug的使用對實驗是有很大幫助的。現(xiàn)在匯編課程已經(jīng)結(jié)束,感覺不如其他語言學(xué)的好,但再不是第一天接觸時的云里霧里了,已經(jīng)有了初步的了解和熟悉,雖說不上得心應(yīng)手,但簡單的問題還是難不倒我的。書本上的知識是有限的,課后的學(xué)習(xí)是無止境的。想要把匯編學(xué)的很好,我想我還需要花更多的時間在課后的時間里。以上便是我在學(xué)習(xí)匯編語言過程中所有的心得體會和一些想法,我會更加努力的去學(xué)習(xí),達(dá)到自己滿意的結(jié)果。
一學(xué)期的學(xué)習(xí)有很大收獲,也讓我意識到自己還有很多不足,很多需要學(xué)習(xí)的地方。
7.參考資料
百度百科:
https://baike.baidu.com/item/%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80/61826?fr=aladdin
匯編語言程序設(shè)計教程(第三版)
CSDN
8.源程序代碼
DATA SEGMENT INFOR1 DB 'Input the First Number(<10):$' ;第一條提示語 INFOR2 DB 0AH,0DH,'Input the Second Number(<10):$' ; 第二條提示語 ;0A 是 '\n' 0D 是 '\r',回車換行INFOR3 DB 0AH,0DH,'The Result is:$' ;第三條提示語DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXLEA DX,INFOR1 MOV AH,09HINT 21HMOV AH,01H INT 21HSUB AL,30H ;因為輸入的為ASCII碼,所以減去48MOV BL,ALLEA DX,INFOR2MOV AH,09HINT 21HMOV AH,01HINT 21HSUB AL,30HXOR AH,AH ;將AH清空ADD AL,BL AAA ;加法ASCII碼調(diào)整指令PUSH AXLEA DX,INFOR3MOV AH,09HINT 21HPOP AXPUSH AXMOV DL,AHADD DL,30H ;計算結(jié)束之后加上48輸出。MOV AH,02H ;2號系統(tǒng)調(diào)用,輸出單個字符,在匯編中想輸出數(shù)字只能單個ASCII碼的輸出。INT 21HPOP AXMOV DL,ALADD DL,30H MOV AH,02HINT 21HMOV AH,4CHINT 21H CODE ENDS END START總結(jié)
- 上一篇: 汇编语言nop指令
- 下一篇: [BUUCTF]PWN——ciscn_2