匯編語(yǔ)言系列之匯編實(shí)現(xiàn)簡(jiǎn)單數(shù)學(xué)運(yùn)算
軟件:emu8086
語(yǔ)言:匯編語(yǔ)言(Assembly)
注意:本文列出了兩種算術(shù)運(yùn)算的代碼,全部代碼為博主獨(dú)自一人編寫,會(huì)有瑕疵,謹(jǐn)慎使用。
1.計(jì)算S=1+2×3+3×4+4×5+···+N(N+1)
1.1設(shè)計(jì)要求:
設(shè)計(jì)程序,實(shí)現(xiàn)數(shù)學(xué)公式S=1+2×3+3×4+4×5+···+N(N+1)的算法。數(shù)值N由加鍵盤輸入,計(jì)算結(jié)果在顯示終端輸出。設(shè)計(jì)要求:計(jì)算結(jié)果不超過十六位寄存器的存儲(chǔ)能力,如有溢出提示錯(cuò)誤。
1.2設(shè)計(jì)思路:
輸入N值然后把N給BH作為循環(huán)次數(shù),通過循環(huán)實(shí)現(xiàn)乘和累加計(jì)算,結(jié)果為十六進(jìn)制,通過除以10得到十進(jìn)制,存入堆棧再依次輸出。
1.3程序清單:
DATA SEGMENT pkey DB 0dh,0ah,"pleas input N end by ';' :$" over DB 0AH,0DH,"overflow!",0dh,0ah,'$' result DB 0dh,0ah,'result is:','$' DAT1 DB 8 DUP(0) DATA ENDS STACK SEGMENT SSTACK DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK STATE: MOV AX,DATA MOV DS,AX LEA SI,DAT1 ;開辟緩沖區(qū) LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調(diào)用,輸出字符串 LLP:MOV AH,1 INT 21H ;DOS功能調(diào)用,輸入N值 SUB AL,2FH INC DX ;DX計(jì)數(shù) MOV [SI],AL ;將輸入的數(shù)據(jù)存在SI緩沖區(qū) INC SI CMP AL,0CH ;輸入為封號(hào)結(jié)束輸入 JNZ LLP SUB SI,2 CMP DX,02H ;DX不為2表示輸入為兩位數(shù) JNZ LLLP LLP1:MOV CX,1 MOV BL,2 ;賦初始值 JMP LP LLLP: MOV DI,SI SUB DI,1 SUB [DI],1 MOV AL,10 MUL [DI] ADD [SI],AX ;輸入是兩位數(shù)時(shí)十位乘10加個(gè)位 SUB AH,AH JMP LLP1 LP: MOV BH,[SI] ;把循環(huán)次數(shù)給BH MOV AL,BL INC BL MUL BL ;BL(加1)和AL(原值)相乘給AX ADD CX,AX ;AX和CX相加給CX,通過循環(huán)實(shí)現(xiàn)累加 JO OOF ;如果溢出重新輸入 CMP BH,BL ;判斷是否達(dá)到N值 JNZ LP MOV AX,CX MOV CX,0AH MOV BX,0 LOP:MOV DX,0 DIV CX ;AX表示的32位數(shù)除以10,商放在AX,余數(shù)放在DX INC BX ADD DX,30H PUSH DX ;將余數(shù)依次壓入棧 CMP AX,0 JNZ LOP ;商不為0繼續(xù)除10 LEA DX,result MOV AH,9 INT 21H ;DOS功能調(diào)用,輸出字符串 OUTPUT: POP DX MOV AH,2 INT 21H ;DX中數(shù)據(jù)依次出棧并顯示 DEC BX JNZ OUTPUT ;出棧完成后停止 JMP STATE OOF:LEA DX,over MOV AH,09H INT 21H ;DOS功能調(diào)用,溢出顯示 JMP STATE CODE ENDS END STATE
1.4程序運(yùn)行結(jié)果及分析:
乘法和累加計(jì)算根據(jù)流程圖一步步賦值即可得到,在輸入兩位數(shù)和結(jié)果轉(zhuǎn)十進(jìn)制輸出時(shí)遇到了麻煩,通過查找資料不斷嘗試,最終找到了簡(jiǎn)單的解決辦法,即輸入兩位時(shí)移位累加,輸出除以10存入堆棧并依次輸出顯示。
圖5 計(jì)算S=1+2×3+3×4+4×5+···+N(N+1)設(shè)計(jì)結(jié)果
2.計(jì)算N!
2.1設(shè)計(jì)要求:
掌握匯編語(yǔ)言實(shí)現(xiàn)高級(jí)語(yǔ)言中數(shù)學(xué)函數(shù)的方法。設(shè)計(jì)程序,實(shí)現(xiàn)數(shù)學(xué)公式N!=N(N-1)(N-2)······2*1的算法。數(shù)值N由鍵盤輸入,計(jì)算結(jié)果在顯示終端輸出。設(shè)計(jì)要求:N的范圍為0-65535,即不超出16位寄存器的存儲(chǔ)容量。
2.2設(shè)計(jì)思路:
輸入N值,通過循環(huán)實(shí)現(xiàn)階乘并將計(jì)算結(jié)果存入AX,然后十六進(jìn)制轉(zhuǎn)十進(jìn)制輸出。
2.3程序清單:
DATA SEGMENT pkey DB 0AH,0DH,"Please Input N(1-8):",'$' result DB 0AH,0DH,"the results is:",'$' over DB 0AH,0DH,"overflow!",0AH,0DH,'$' DATA ENDS STACK SEGMENT SSTACK DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK STATE: MOV AX,DATA MOV DS,AX ;數(shù)據(jù)段初始化 LEA DX,pkey MOV AH,09H INT 21H ;DOS功能調(diào)用,顯示字符串 MOV AH,1 INT 21H ;DOS功能調(diào)用,輸入N SUB AL,30H CMP AL,08H JA OOF ;輸入大于8溢出 XOR AH,AH MOV BP,AX ;賦循環(huán)計(jì)數(shù)值N給BP LP: MOV BX,BP DEC BX JZ LLP ;階乘次數(shù)為BX,BX為0必須馬上跳轉(zhuǎn) MUL BX ;AX中存放階乘結(jié)果(十六進(jìn)制轉(zhuǎn)十進(jìn)制用) DEC BP JNZ LP LLP: MOV CX,0 MOV BX,10 LLLP: MOV DX,0 DIV BX ;AX表示的32位數(shù)除以10,商放在AX,余數(shù)放在DX ADD DX,30H PUSH DX ;將余數(shù)轉(zhuǎn)換為ASCII碼值并壓入棧 INC CX CMP AX,0 ;商不為0就繼續(xù)除10 JNZ LLLP MOV AH,09H LEA DX,result INT 21H ;DOS功能調(diào)用,輸出字符串 LOP: POP DX MOV AH,2 INT 21H ;DX各位出棧并顯示 LOOP LOP JMP STATE OOF: LEA DX,over MOV AH,09H INT 21H ;DOS功能調(diào)用,溢出顯示 JMP STATE CODE ENDS END STATE
2.4程序運(yùn)行結(jié)果及分析:
階乘部分是利用MUL指令A(yù)X中存放計(jì)算結(jié)果并實(shí)現(xiàn)階乘,除階乘計(jì)算部分外,其它部分和第五題類似,同樣結(jié)果轉(zhuǎn)十進(jìn)制輸出時(shí)遇到了麻煩,利用除以10存入堆棧再依次取出并顯示來實(shí)現(xiàn)。
圖6 計(jì)算N!設(shè)計(jì)結(jié)果
到此這篇關(guān)于匯編語(yǔ)言系列之匯編實(shí)現(xiàn)簡(jiǎn)單數(shù)學(xué)運(yùn)算的文章就介紹到這了,更多相關(guān)匯編語(yǔ)言數(shù)學(xué)運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
匯編語(yǔ)言?masm5與debug命令使用方法小結(jié)
本文總結(jié)了匯編程序的基本框架及規(guī)范、masm5工具的基本使用方法、debug命令的基本使用方法2023-08-08匯編語(yǔ)言 輸入10個(gè)數(shù)排序并輸出的實(shí)現(xiàn)
這篇文章主要介紹了匯編語(yǔ)言 輸入10個(gè)數(shù)排序并輸出的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01匯編語(yǔ)言之實(shí)現(xiàn)發(fā)出各種聲音
本文給大家分享一個(gè)練手小項(xiàng)目,響鈴設(shè)計(jì)項(xiàng)目,列出了響鈴,機(jī)槍聲音,音樂播放器的代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2021-11-11匯編語(yǔ)言系列之匯編實(shí)現(xiàn)各種碼制的轉(zhuǎn)換(思路詳解)
本文列出了十六進(jìn)制轉(zhuǎn)二進(jìn)制、十進(jìn)制、ASCII碼及大小寫字母轉(zhuǎn)換的代碼,對(duì)匯編語(yǔ)言系列之實(shí)現(xiàn)各種碼制的轉(zhuǎn)換問題感興趣的朋友跟隨小編一起看看吧2021-11-11匯編語(yǔ)言指令集學(xué)習(xí)CMPXCHG比較并交換操作指令詳解
這篇文章主要為大家介紹了匯編語(yǔ)言指令集學(xué)習(xí)CMPXCHG比較并交換操作的指令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11