日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

微机原理实验2:多字节BCD加法实验

發(fā)布時(shí)間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微机原理实验2:多字节BCD加法实验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、實(shí)驗(yàn)?zāi)康?/h1>

掌握數(shù)據(jù)傳送、算術(shù)指令和循環(huán)指令的用法。

二、實(shí)驗(yàn)內(nèi)容

將兩個(gè)多位十進(jìn)制數(shù)相加。要求加數(shù),被加數(shù)均以ASCII碼形式存放在以DATA1和DATA2為首的5個(gè)內(nèi)存單元中( 低位在前),結(jié)果存在DATA1處。

三、程序清單

CRLF MACRO ;建立宏命令,利用INT中斷實(shí)現(xiàn)回車換行的功能,方便后續(xù)直接調(diào)用MOV DL,0DHMOV AH,02HINT 21H ;光標(biāo)移到第一列MOV DL,0AHMOV AH,02HINT 21H ;光標(biāo)移到下一行 ENDMDATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H ;被加數(shù)ASCII碼 DATA2 DB 36H,35H,30H,38H,32H ;加數(shù)ASCII碼 DATA ENDSSTACK SEGMENT STACK ;堆棧段 STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA2 ;SI存放數(shù)據(jù)地址MOV BX,05 ;BX中存放數(shù)字長(zhǎng)度CALL DISPL ;顯示加數(shù)CRLFMOV SI,OFFSET DATA1 ;源地址指向被加數(shù)MOV BX,05CALL DISPL ;顯示被加數(shù)CRLFMOV DI,OFFSET DATA2 ;目的地址指向加數(shù)CALL ADDA ;調(diào)加法運(yùn)算子程序MOV SI,OFFSET DATA1MOV BX,05CALL DISPL ;顯示結(jié)果CRLFMOV AX,4C00HINT 21H ;返回DOSDISPL PROC NEAR ;顯示子程序 DS1: MOV AH,02MOV DL,[SI+BX-1] ;顯示字符串中一個(gè)字符INT 21HDEC BXJNZ DS1RET DISPL ENDPADDA PROC NEAR ;加法運(yùn)算子程序MOV DX,SIMOV BP,DIMOV BX,05 AD1: SUB BYTE PTR [SI+BX-1],30H ;將ASCII碼轉(zhuǎn)換位二進(jìn)制數(shù)SUB BYTE PTR [DI+BX-1],30HDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05 ;五位數(shù)加法, 5 作為循環(huán)次數(shù)CLC ;清進(jìn)位標(biāo)志 AD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BL ;帶進(jìn)位加法AAA ;非組合BCD碼調(diào)整;如果al的低4位是在0到9之間,保留低4位,清除高4位,如果al的低4位在10到15之間;則通過加6,來使得低4位在0到9之間,然后再對(duì)高4位清零。;如果al的低4位是在0到9之間,ah值不變,CF和AF標(biāo)志清零,否則,ah=ah+1,并設(shè)置CF和AF標(biāo)志MOV [SI],AL ;結(jié)果存被加數(shù)區(qū)INC SI ;指向下一位INC DILOOP AD2 ;沒有加夠 5 位轉(zhuǎn)MOV SI,DX ;恢復(fù)加數(shù),被加數(shù)地址指針MOV DI,BPMOV BX,05 AD3: ADD BYTE PTR [SI+BX-1],30H ;轉(zhuǎn)換為ASCII碼ADD BYTE PTR [DI+BX-1],30HDEC BXJNZ AD3RET ADDA ENDP CODE ENDSEND START

四、實(shí)驗(yàn)過程

1.用編輯器建立源文件D101-2.ASM

2.用匯編程序MASM.EXE對(duì)源文件進(jìn)行匯編,產(chǎn)生目標(biāo)文件,再用連接程序LINK產(chǎn)生可執(zhí)行文件

3.使用調(diào)試工具DEBUG進(jìn)行程序調(diào)試
先用U命令反匯編,以便了解指令地址。顯示結(jié)果如下,具體調(diào)試結(jié)果見第五部分。

五、實(shí)驗(yàn)結(jié)果分析

1.程序調(diào)試及結(jié)果
可以看到在076D:0015地址處的指令是調(diào)用顯示子程序DISPL來顯示加數(shù),被加數(shù)的顯示類似,使用G命令執(zhí)行到076D:0039處,查看顯示結(jié)果。

使用-G 0076命令執(zhí)行到ADDA子程序中,使用D命令查看ASCII碼被轉(zhuǎn)化為十六進(jìn)制數(shù)后在內(nèi)存中的存放情況,如下

使用-G 008f命令執(zhí)行到BCD加法結(jié)束,查看被加數(shù)內(nèi)存區(qū)域數(shù)值如下,因?yàn)?8056+47193=75249,因此內(nèi)存區(qū)域由低地址到高地址應(yīng)依次為09 04 02 05 07,使用-d ds:0命令進(jìn)行查看,與理論值一致。

繼續(xù)使用G命令運(yùn)行程序,直到將計(jì)算結(jié)果轉(zhuǎn)化為ASCII碼后,結(jié)果為

最后,運(yùn)行到程序結(jié)束,將結(jié)果打印到屏幕上,如下:

2.分析總結(jié)

首先,在MASM編譯器Microsoft ? Macro Assembler Version 5.00版本下,糾正實(shí)驗(yàn)指導(dǎo)書中出現(xiàn)的一個(gè)小問題。實(shí)驗(yàn)指導(dǎo)書中對(duì)“CRLF”命令宏的建立代碼放在了文件最開頭,然而在該版本編譯器下編譯會(huì)報(bào)錯(cuò):Out of memory,將該宏命令放入代碼段后編譯即可編譯成功,后續(xù)又將其放在文件開頭編譯,又可以編譯成功沒任何報(bào)錯(cuò)信息,對(duì)此迷惑不解,具體原因還需查閱相關(guān)資料。

本次實(shí)驗(yàn)的核心在于數(shù)據(jù)的傳送指令、算數(shù)指令和循環(huán)指令的用法,其中比較重要的指令有:AAA(ASCII adjust after addition)指令,是BCD指令集中的一個(gè)指令,用于在兩個(gè)未打包的BCD值相加后,調(diào)整al和ah寄存器的內(nèi)容;BCD(Binary-coded decimal)數(shù)是指2進(jìn)制編碼的10進(jìn)制數(shù),占據(jù)一個(gè)字節(jié)的低4位,只有0-9是有效值。AAA指令做兩件事情:(1)如果al的低4位是在0到9之間,保留低4位,清除高4位,如果al的低4位在10到15之間,則通過加6,來使得低4位在0到9之間,然后再對(duì)高4位清零。(2)如果al的低4位是在0到9之間,ah值不變,CF和AF標(biāo)志清零,否則,ah=ah+1,并設(shè)置CF和AF標(biāo)志。此外,還要搞清楚ADC等帶進(jìn)位加法指令與不帶進(jìn)位加法ADD指令的區(qū)別,將這些搞明白,則本實(shí)驗(yàn)的核心內(nèi)容就沒有什么問題了。

總結(jié)

以上是生活随笔為你收集整理的微机原理实验2:多字节BCD加法实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。