




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ASCII碼與BCD碼之間的轉換1)字符的ASCII碼表示計算機中存儲的信息很多,其中一部分是用于數學計算的數據,另一部分則是表示某種含義的字符或字符串。由于從鍵盤輸入的或屏幕顯示的信息,都是用字符串的形式表示的。因此,微機中必須能夠存儲和處理字符和字符串。計算機中使用的字符包括有如下4類:·字母:A、B、C、Y、Z、a、b、c、y和z。·數字:0、1、2、3、9。·專用符號:!、 ·控制字符:BEL(響鈴)、LF(換行)、CR(回車) 這些字符在計算機內部都由特定的二進制數表示。目前在微機中,最常用的字符表示法是ASCII碼(American Stan
2、dard Code for Information Interchange,美國標準信息交換碼)。在這種表示法中,每一個字符可以表示為一個8位的二進制數,即一個字節(jié)。其中。低7位用于表示該字符的ASCII值,最高位未定義,一般可用作奇偶校驗位。常用字符的ASCII碼表見表1.2。2)、十進制數的BCD碼表示BCD碼(Binary Code Decimal),又稱“二進制表示的十進制數”,是一種非常適合數據輸出的編碼。一般而言,它可分為如下兩種:(1)、壓縮型BCD碼:它用4位二進制數表示一位十進制數。即采用二進制數00001001分別表示十進制數中的09,而另6種組合10101111在BCD中
3、則不允許出現;(2)、非壓縮型BCD碼:它用8位二進制數,即一個字節(jié)表示一位十進制數。其高4位固定為0,而低4位采用二進制數00001001分別表示十進制數中的09。亦即用0000 00000000 1001分別表示十進制數中的09。而其余組合則不允許出現。表1列出了十進制數與BCD編碼的對應關系。表1 BCD編碼表BCD編碼十進制數BCD編碼十進制數00000001001000110100010101100111012345671000100110101011110011011110111189這六種情況在BCD碼中不允許出現實驗程序1.按如下步驟操作,了解 DEBUG 命令及其使用方法。
4、(1)打 DEBUG 進入 DEBUG 控制,顯示提示符 '_ '。(2)用命令 F100 10F 'A' 將'A'的ASCII碼填入內存。(3)用命令 D100 10F 觀察內存中的16進制碼及屏幕右邊的ASCII字符。再用命令 D100 觀察內存情況,之后接用二個命令D 觀察內存情況。再用命令D100:10F 觀察內存區(qū)的情況,說明這次與上次內存區(qū)各個段地址是什么,為什么?(4)用命令 F110:11F 'A' 重復上二項實驗,設法用D命令找到并觀察結果,進行比較。(5)用命令 E100 30 31 32 3F將30H-3FH
5、寫入地址為100開始的內存單元中,再用D命令觀察結果,看鍵入的16進制數是什么字符的ASCII碼? (6)用H命令檢查下列各組16進制數加減結果并和你的手算結果比較: 34H,22H56H,78HA5,79H1284H,5678HA758,347FH 例如: H 34 22(7)用R 命令檢查各寄存器內容,特別注意AX,BX,CX,DX,IP及標志位中ZF,CF 和AF的內容。 (8)用R命令將AX,BX內容改寫為1050H及23A8H。(9)用A命令在內存100H處鍵入下列內容: MOV BX, 8275HMOV AX,3412HADD BX,92A5HADC AX,2F65HADD BX,
6、EAE6HADC AX,9C88H 用U命令檢查鍵入的程序并記錄,特別注意左邊的機器碼。 用T命令逐條運行這些指令,每運行一行檢查并記錄有關寄存器及IP的變化情況。并注意標志位有無變化。標志位顯示10 CF CYNC ZF ZRNZ SF NGPL AF ACNA OF OVNV PF PEPO DF DNUP IF EIDI(1)對照書本中關于 debug操作的介紹對以上實驗內容進行總結。(2)G命令的功能是什么?有那幾種格式?(3)D命令的功能是什么?有那幾種格式?(4)用P命令逐條運行上述指令,與T命令進行比較,閱看書本中關于這二個命令的說明,它們之間有什么不同,在本實驗中為什么沒有體現
7、?本試驗未體現2.在編譯與連接生成執(zhí)行程序之后利用DEBUG調試該程序,了解不同變量數據存儲情況,了解變量的三種含義及用法,了解加法、乘法運算方法及對標志位的影響。(在某些句后給出了單步執(zhí)行該句后需要思考與記錄的問題)。DATA SEGMENT A DW 35H,9AC9H DB 34H B DW 4CBEH,8872H DB 34H C DD 8A607H DB 34H D DD 98AB457H DB 34H E DB -48HDATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS
8、:STACK,CS:CODESTART:MOV AX,DATA ;數據段在那里?怎樣看數據段中的內容? MOV DS,AX;在執(zhí)行一次單步后查看數據區(qū),記錄數據是怎樣存放的。;對以下每句運行后分析:這一句的意義是什么?; 如果是加法,相加的數據是什么?在存儲區(qū)什么位置?; 處理的結果在那里?; 對標志位的影響如何?; 觀察一下,如果去掉“WORD PTR ”編譯時會如何? MOV AX,OFFSET A+2 ;AX中值是多少?意義是什么? LEA AX,A+2 ; AX中值是多少?意義是什么? MOV AX,A+2 ADD AX,B+2 ;多少加多少,結果在那里?等于多少?有沒有標志改變? M
9、OV BX,A ADC BX,B ;多少加多少,結果在那里?等于多少?有沒有標志改變? MOV AX,WORD PTR C ADD AX,WORD PTR D ;多少加多少 MOV AX,WORD PTR C+2 ADC AX,WORD PTR D+2 ;多少加多少;對以下每句分析:數據是如何存放的?; 相乘結果在那里?; 對CF與OF的影響如何?特別注意進位與符號擴展并不完全對應 MOV AL,E MOV BL,-3 MUL BL ;多少乘多少,結果在那里?等于多少?有沒有標志改變?為什么? MOV AL,E MOV BL,3 MUL BL ;多少乘多少,結果在那里?等于多少?有沒有標志改變
10、?為什么? MOV AL,E MOV BL,-3 IMUL BL ;多少乘多少,結果在那里?等于多少?有沒有標志改變?為什么? MOV AL,E MOV BL,-1 IMUL BL ;多少乘多少,結果在那里?等于多少?有沒有標志改變?為什么? MOV AL,E MOV BL,3 IMUL BL ;多少乘多少,結果在那里?等于多少?有沒有標志改變?為什么? MOV BL,-1 MUL BL ;-1=ffh,cf=1。為什么? MOV AL,58h MOV BL,-1 iMUL BL ;-1,cf=0,高位全1。為什么? MOV AL,90h MOV BL,-1 MUL BL ;-1=ffh,cf
11、=1。為什么? MOV AL,90h MOV BL,-1 IMUL BL ;-1,cf=0,高位全0。為什么? MOV AL,58h MOV BL,1 MUL BL ;*1,cf=0,高位全0。為什么? MOV AL,58h MOV BL,1 iMUL BL ;*1,cf=0,高位全0。為什么? MOV AL,90h MOV BL,1 MUL BL ;*1,cf=0,高位全0。為什么? MOV AL,90h MOV BL,1 IMUL BL ;*1,cf=0,高位全1。為什么? MOV AH,4CH INT 21HCODE ENDS END START(1)乘法運算時使CF與OF為0的情況其實
12、不多見,你能否總結一下大致在什么情況下會出現它們?yōu)?的情況?(2)如果要看到數據中數據的存放情況,一種方法是用D<段地址> <偏移地址>,另一種方法是用DDS:< 偏移地址>。你用什么方法得到段地址?試用這二種方法觀察數據區(qū)中數據存放情況,A、B、C、D、E的地址各是多少,為什么?3.檢查下面那些指令是錯誤的,說明原因并改正。(用MASM對該程序進行編譯,觀察那些語句報錯,報的是什么錯?再看語句,根據語法與句法分析實際是什么錯,在語句后加簡單注釋,說明錯誤原因,嘗試進行修改,要求盡量使修改結果符合原設計意圖。最終要求全部修改后能通過編譯。)DATA SEGM
13、ENT BUF DB 3 DA1 DB ? C DB 'B',0DH,0AH,'$' COUNT EQU $-CDATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AXMOV DL,255H INC COUNT MOV CS,DX CMP 280,BL PUSH DX LEA AL,C MOV BX,DA1DX SUB DI,SI ADD DX,BX MOV 80H,AX M
14、OV DA1,AX ADD DI,10H MOV BX,OFFSET DA1 MOV SI+DI,BX INC CS MOV ES,DSPOP AHROL AX,2MOV BX,DA1DI MOV AH,4CH INT 21HCODE ENDS END STARTASCII碼與壓縮型BCD碼的相互轉換4.十進制數的ASCII碼轉換為壓縮型BCD碼令數據段中自ASC_BUF開始的緩沖區(qū)內存放著若干個ASCII碼表示的十進制數(每個單元存放一位十進制數),要求將這些ASCII碼表示的十進制數轉換為BCD碼,并把兩個相鄰單元的BCD碼合并在一個存儲單元(若ASCII碼的個數為奇數,則將首地址單元的十
15、進制數對應的BCD碼單獨存放一個單元,其余的按統(tǒng)一的方法處理)。應用DEBUG跟蹤執(zhí)行程序,當程序執(zhí)行到語句MOV AH,4CH 時,查看數據區(qū)的內容,分析運行結果。通過執(zhí)行過程深入理解內存儲器分段的概念。本程序中因有的位置使用了中文符號,在編譯時會報錯,觀察是如何報錯的?檢查問題出現在什么地方,將之改正后重新編譯直到通過。 DATA SEGMENT ASC_BUF DB 71542185 COUNT EQU $-ASC_BUF BCDBUF DB 10 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV
16、AX,DATA MOV DS,AX MOV SI,OFFSET ASC_BUF MOV DI,OFFSET BCDBUF MOV CX,COUNT MOV BX,CX SHR BX,1 ;BX右移一位,等效于除2 JNC EVEN1 ;(CF)=0,則CX為偶數 MOV BL,SI ;對首位單獨進行處理 AND BL,0FH MOV DI,BL DEC CX INC SI INC DIEVEN1: MOV AL,SI AND AL,0FH ;清高4位為0 MOV BL,SI+1 AND BL,0FH ;清高4位為0 MOV DL,16 MUL DL ADD AL,BL MOV DI,AL AD
17、D SI,2 INC DI DEC CX JNZ EVEN1 MOV AH,4CH INT 21HCODE ENDS END START(1)畫出本程序程序流程圖。(2)將71542185改為471542185,觀察結果有何不同,分析程序中判斷數字個數奇偶并“對首位單獨進行處理”的意義與程序設計方法。(3)總結將二個十六進制字符拼成一個八位二進制數的程序設計方法。5.壓縮BCD碼轉換為十進制數的ASCII碼將數據段中字節(jié)變量BCD_BUF為首地址的緩沖區(qū)中一個八位十進制數對應的壓縮BCD碼轉換為ASCII碼,并顯示。DATA SEGMENTBCD_BUF DB 34H,25H,12H,97H
18、;十進制數97122534DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATAMAIN PROC NEAR PUSH DS SUB AX,AXMOV AX,DATAMOV DS,AXMOV CX,4MOV SI,OFFSET BCD_BUFADD SI,3MOV DH,0CHG_OUT1: PUSH CXMOV AL,SI ;取壓縮BCD碼DEC SI ;修改指針MOV BL,AL ;保存ALMOV CL,4ROR AL,CLAND AL,0FH ;取高半字節(jié)BCD碼ADD AL,30H ;生成ASCII碼MOV DL,ALMOV AH,2INT 21H
19、;標準設備輸出MOV AL,BL ;從BL所保存的AL恢復ALAND AL,0FH ;取低半字節(jié)BCD碼ADD AL,30H ;生成ASCII碼MOV DL,ALMOV AH,2INT 21H ;標準設備輸出 POP CX DEC CXJNZ CHG_OUT1RETMAIN ENDPCODE ENDS END (1)對本程序不用執(zhí)行執(zhí)行文件的方式,而分別用DEBUG單步跟蹤、分斷點運行等二種方式操作,記錄操作過程與執(zhí)行結果。(2)總結從一個字節(jié)16進制數據獲得其二個16進制數碼的程序設計方法。二進制數與BCD碼之間的轉換6.二進制數轉換為壓縮BCD碼將DX寄存器中存放的無符號二進制數(0655
20、35)轉換為壓縮BCD碼(在程序中自行加一條語句,將一個數保存到DX中),保存在BCD_BUF緩沖區(qū)中。應用DEBUG跟蹤執(zhí)行程序,查看數據區(qū)的內容,分析運行結果DATA SEGMENTBCD_BUF DB 3 DUP(0) DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATAMAIN PROC NEAR PUSH DS SUB AX,AXMOV AX,DATAMOV DS,AXMOV DI,OFFSET BCD_BUFMOV AL,0MOV CX,5CLEAR_BUF: MOV DI,AL ;初始化緩沖區(qū)INC DIDEC CXJNZ CLEAR_BUFMOV DI,OFFSET BCD_BUFCHG_BCD1: MOV AX,DX ;轉換開始MOV DX,0MOV CX,10DIV CXMOV BL,DLMOV DX,0MOV CX,10DIV CXMOV CL,4SHL DL,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 衛(wèi)生潔具行業(yè)政策變化與零售商市場適應性分析考核試卷
- 2025年旅游飯店住宿服務項目發(fā)展計劃
- 摩托車軸承選型與壽命評估考核試卷
- 房屋建筑的開放式設計與空間布局考核試卷
- 2025年消毒滅菌設備器具項目發(fā)展計劃
- 2025年酸霧凈化器項目合作計劃書
- 科技發(fā)展與生命教育價值觀的融合
- 電梯安全標準與防護系統(tǒng)設計要點
- 科技企業(yè)管理知識手冊
- 社交電商平臺的產品定位與差異化策略
- 體育競賽的組織與編排
- 動靜脈內瘺的圍手術期護理-課件
- reaxys使用介紹課件
- 工程建設項目管理培訓教材課件
- 11-化學動力學基礎-2-考研試題資料系列
- 《簡愛》課本劇劇本
- 社區(qū)獲得性肺炎臨床路徑
- 產品品質檢驗流程標準規(guī)范模板()
- GB∕T 7260.40-2020 不間斷電源系統(tǒng) UPS 第4部分:環(huán)境 要求及報告
- 安全文明施工管理(EHS)方案(24頁)
- 水廠項目基于BIM技術全生命周期解決方案-城市智慧水務講座課件
評論
0/150
提交評論