匯編語言上機實驗二_第1頁
匯編語言上機實驗二_第2頁
匯編語言上機實驗二_第3頁
匯編語言上機實驗二_第4頁
匯編語言上機實驗二_第5頁
已閱讀5頁,還剩15頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

匯編語言上機實驗(二)

4學時實驗二數制、碼制和子程序的編程與調試

一.實驗目的:1.熟練掌握編寫匯編語言原程序的基本方法和基本框架。2.熟練使用DEBUG調試程序。3.掌握十六進制數與ASCII碼之間,ASCII碼與BCD碼之間的轉換。4.掌握用DOS功能調用,實現字符的輸入和顯示。5.掌握子程序的編程與調試方法。二.實驗內容:1、從鍵盤輸入兩個2位十進制正數轉換成二進制數后,對這兩個數進行相加相乘運算,結果以十六進制數形式顯示在屏幕上。2、從鍵盤輸入兩個2位十進制正數轉換成組合BCD碼后,對這兩個數進行相加相乘運算,結果以十進制形式顯示在屏幕上。3、從鍵盤輸入一個4位十進制正數并回顯后,將其對應的十六進制數顯示在屏幕上。三、實驗要求及調試步驟程序說明。說明程序的功能、結構。調試說明。包括上機調試的情況、上機調試步驟、調試所遇到的問題是如何解決的,并對調試過程中的問題進行分析,對執行結果進行分析。寫出源程序清單和執行結果。【舉例】從鍵盤輸入4位十六進制數(它對應的二進制數是補碼表示的帶符號數),把它們轉換為帶符號非組合型BCD碼,并在屏幕上顯示出來。從鍵盤輸入1~4位十六進制數,存放在以HEXBUF+2為首址的4個字節單元中。其中HEXBUF+1單元中為輸入的數據個數。字符串輸入功能調用(0AH號功能調用)

格式: MOVDX,已定義緩沖區的偏移地址

MOVAH,0AH

INT21H功能:從鍵盤接收字符,并存放到內存緩沖區。①執行前先定義一個輸入緩沖區,緩沖區內第一個字節定義為允許最多輸入的字符個數,字符個數應包括回車符0DH在內,不能為“0”值。第二個字節保留,在執行程序完畢后存入輸入的實際字符個數。從第三個字節開始存入從鍵盤上接收字符的ASCII碼。若實際輸入的字符個數少于定義的最大字符個數,則緩沖區其他單元自動清0。若實際輸入的字符個數大于定義的字符個數,其后輸入的字符丟棄不用,且響鈴示警,一直到輸入回車鍵為止。整個緩沖區的長度等于最大字符個數再加2。

②應當將緩沖區首地址的段基址和偏移地址分別存入DS和DX寄存器中?!瑽UF

DB25;緩沖區長度

ACTHAR

DB?;保留單元,存放輸入的實際字符個數

CHAR

DB25DUP(?);定義25個字節存儲空間

DB‘$’

……

MOVAX,DATA

MOVDS,AX

……

MOVDX,OFFSETBUF

MOVAH,0AH

INT21H

……

本例可從鍵盤接收23個有效字符并存入以BUF

為首地址的緩沖區中。將ASCII碼表示的4位十六進制數轉換為16位二進制數,并暫時存放在

BX中;

字符對應的ASCII碼0~930H~39HA~Z41H~5AH換行0AH回車0DHESC鍵1BH空格20H確定十進制數的符號,并把符號(+或-)存放在BCDBUF單元中;使用指令TEST對最高位進行判定,如若最高位為1,則是負數,反之。對BX中的二進制數采用前述算法轉換為十進制數(非組合型BCD碼),轉換結果存放在以BCDBUF+1為首址的5個字節單元中;把轉換結果的5個非組合型BCD碼形成相應的ASCII碼。

組合BCD碼是用4個二進制位表示一個十進制位,如:

MOVAL,68H

MOVBL,28H

ADDAL,BL

;AL=68H+28H=90H DAA

;十進制調整:AL=96H

非組合BCD碼是用8個二進制位表示一個十進制位。如:

MOVAX,0608H MOVBL,09H

ADDAL,BL

;AL=08H+09=11H

AAA

;十進制調整:AX=0107H顯示結果屏幕顯示字符串(9號功能調用)格式: MOVDX,字符串的偏移地址

MOVAH,09H

INT21H在使用9號功能調用時,應當注意以下問題:

①待顯示的字符串必須先放在內存一數據區(DS段)中,且以‘$’符號作為結束標志。

②應當將字符串首地址的段基址和偏移地址分別存入DS和DX寄存器中。

… BUF

DB‘HOWDOYOUDO?’,0AH,0DH,‘$’

MOV

AX,DATA MOV

DS,AX

MOV

DX,OFFSETBUF

MOV

AH,09H

INT

21H

執行程序,在屏幕上顯示“HOWDOYOUDO?”字符串。實驗要求一參考程序:TITLECONVERTHEXADECIMALTOBCDDATASEGMENTPROMPTDB"INPUTHEXADECIMAL(4DIGITS):$'HEXBUFDB5,0,5DUP(0)DISPDB0AH,0DHBCDBUFDB6DUP(0),'$'DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1HEXBCD:MOVAX,DATAMOVDS,AX;輸入1~4位十六進制數

LEADX,PROMPT;顯示提示信息

MOVAH,09HINT21HLEADX,HEXBUF;輸入數據

MOVAH,0AHINT21H;ASCII碼轉換為16位二進制數并存入BX中

LEASI,HEXBUF+2;取十六進制數ASCII碼首址

MOVBX,0;暫存二進制數的寄存器清零

MOVCH,HEXBUF+1;取輸入數據個數HEX1:MOVAL,[SI];取一個十六進制數字符

CMPAL,'9'JBENUMB;小于等于‘9’是數字符SUBAL,07H;是字母符

NUMB:ANDAL,0FHMOVCL,4SALBX,CLORBL,ALINCSIDECCHJNEHEX1;確定十進制數的符號

MOVBCDBUF,'+'TESTBX,8000HJNSPLUS;是正數

MOVBCDBUF,'-';是負數

NEGBX;求補后變為原碼;將二進制數轉換為非組合型BCD碼,從二進制數高位起,進行15次加和乘PLUS:MOVCH,0FH;“加乘”運算的次數LOP0:SHLBX,1;最高位二進制數送CFCALLADDIT;先加1位二進制數

CALLMULTI;再乘2DECCHJNELOP0SHLBX,1;加最低位二進制數

CALLADDIT

;把非組合型BCD碼轉換為ASCII碼形式

LEADI,BCDBUF+1MOVCX,5LOP1:ORBYTEPTR[DI],30HINCDILOOPLOP1;顯示結果

LEADX,DISPMOVAH,09HINT21HMOVAH,4CH;程序結束

INT21H;多字節BCD碼加1位二進制數子程序ADDITPROCLEADI,BCDBUF+5;從低位開始

MOVCL,5;取字節數ADD1:MOVAL,[DI];取BCD碼

ADCAL,0;加二進制數位(CF)AAA;十進制數運算校正

MOV[DI],AL;存BCD碼

DECDIDECCLJNEADD1RETADDITENDP;多字節BCD碼乘2子程序MULTIPROCLEADI,BCDBUF+5;從低位開始

MOVCL,5CLCMUL1:MOVAL,[DI];取BCD碼

ADCAL,AL;乘2AAA;十進制數運算校正

MOV[DI],AL;存BCD碼

DECDIDECCLJNEMUL1RETMULTIENDPCOSEGENDSENDHEXBCD程序詳解

假定我們要對4位二進制數(0110)進行轉換。首先BX=0110,設置的BCDBUF為三個字節空間,Ch=3

Lop0:bx=1100cl=2cf=0

執行calladdit有:

al=0adcal,0;al=0aaa;al=0cl=1;重復有:

al=0adcal,0;al=0aaa;al=0cl=0執行callmulti有:

cf=0cl=2al=0adcal,0;al=0aaa;al=0cl=1;重復有:

al=0adcal,0;al=0aaa;al=0cl=0第二輪循環ch=2bx=1000cf=1Lop0:cl=2Calladdit有:Al=0Adcal,0;al=1Aaa;al=1Cl=1cf=0重復有:Al=0Adcal,0;al=0Aaa;al=0Cl=0Cl=2cf=0Callmulti有:Al=1Adcal,al;al=2Aaa;al=2Cl=1cf=0重復有:Al=0Adcal,al;al=0Aaa;al=0Cl=0第三輪循環ch=1bx=0000cf=1

(該輪循環結束后CH=0,不再循環)Lop0:cl=2Calladdit有:Al=2Adcal,0;al=3Aaa;al=3Cl=1cf=0重復有:Al=0Adcal,0;al=0Aaa;al=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論