汇编语言——《子程序应用(数制转换)程序设计》实验报告
實驗目的
實驗內容
1、編寫十進制到十六進制轉換程序。要求從鍵盤取得一個十進制數,然后把該數以十六進制形式在屏幕上顯示出來
2、已知從BUF開始存放了10個16進制字數據,編程求出這10個數中的最大數,(將最大數存入MAX字節單元),并將其以10進制數的形式在屏幕上顯示出來。
(提示:以上兩題都要求采用子程序的方法)
3、從鍵盤上輸入一行字符,如果這行字符比前一次輸入的一行字符長度長,則保存該行字符,然后繼續輸入另一行字符;如果它比前一次輸入的行短,則不保存這行字符。按下‘$’輸入結束,最后將最長的一行字符顯示出來。(選作)
(提示:定義數據段,包括兩個變量STRING和BUFFER,格式如下:
STRING?? DB? 0??? ;存放字符的個數 DB 80 DUP (?), 0DH,0AH,‘$’;存放前一次輸入的字符串,兼作顯示緩沖區 BUFFER? DB? 80? ;輸入字符串的緩沖區,最多輸入80個字符 DB? ? DB? 80 DUP (20H)然后利用0AH號DOS系統功能調用收入字符,用09H號系統功能調用輸出。)
設計思想
1.先調用子函數decibin由鍵盤輸入一個數字后,先減去30h把ASCII碼形式轉換為十進制數形式,保存在bx中,再調用子函數binihex,用十六進制形式顯示bx中的數。
2.利用子函數max依次比較,將buf中10個字的最大值放到bx中,再一次除以10000,1000,100,10,并分別把余數放到bx,商放到dl,并轉換為ASCII碼格式,即把十六進制轉為10進制,最后調用2號功能輸出結果即可。
3.調用0ah功能,將輸入字符放到緩沖區,并把之后輸入的字符串依次與緩沖區內容相比較,若小于緩沖區內容,則被替換,直到輸入$即停止輸入字符串為止,輸出最終存放在string中的字符串的內容。
程序代碼
1、
data segment Str1 db 0DH,0AH,'Please input a number: ','$'Str2 db 0DH,0AH,'Trans:','$' data ends decihex segmentassume cs:decihex,ds:data main proc far push ds sub ax,axpush axmov ax,datamov ds,ax repeat: lea dx,Str1 mov ah,09int 21hcall decibinlea dx,Str2 mov ah,09int 21hcall binihexmov dl,0ah ;換行mov ah,2int 21hjmp repeat main endpdecibin proc nearmov bx,0 newchar:mov ah,1int 21hsub al,30hjl exit cmp al,9djg exit cbw xchg ax,bx mov cx,10dmul cxxchg ax,bx add bx,ax jmp newchar exit:ret decibin endpbinihex proc nearmov ch,4 rotate: mov cl,4rol bx,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7h printit:mov dl,almov ah,2int 21hdec chjnz rotateret binihex endpdecihex ends end main2、
data segmentbuf dw 05h,0fh,15h,1fh,45h,25h,2ah,32h,3ah,3fh data ends code segmentassume cs:code,ds:data main proc far start:mov ax,datamov ds,axcall maxcall conveymov ax,4c00hint 21hmain endp max proc nearmov bx,0mov cl,10mov ax,buf[bx] repeat:add bx,2cmp ax,buf[bx]jg greatermov ax,buf[bx] greater: loop repeatmov bx,axret max endp convey proc nearmov cx,10000dcall divid mov cx,1000dcall dividmov cx,100dcall dividmov cx,10dcall dividmov cx,1dcall divid ret convey endp divid proc near mov ax,bxmov dx,0div cxmov bx,dxmov dl,aladd dl,30hmov ah,2int 21h ret divid endp code endsend start3、
data segment STRING DB 0 ;存放字符的個數DB 80 DUP (?), 0DH,0AH,'$' ;存放前一次輸入的字符串,兼作顯示緩沖區BUFFER DB 82 ;輸入字符串的緩沖區,最多輸入80個字符DB ?DB 80 DUP (?) outstr db 0dh,0ah,'Longest string:','$' data endscode segment assume cs:code,ds:data,es:data main proc far start:mov ax,datamov ds,axmov es,ax repeat: mov ah,02hmov dl,0dhint 21hmov ah,02hmov dl,0ahint 21hlea dx,buffermov ah,0ahint 21hmov al,buffer[2]cmp al,'$'jnz comparejmp output compare:mov al,buffer[1]cmp al,string[0]jl repeatmov string,allea si,buffer[2]lea di,string[1]mov cl,buffer[1]sub ch,chcldrep movsbjmp repeat output:lea dx,outstrmov ah,09hint 21hlea dx,string[1]mov ah,09hint 21hmov ah,4chint 21h main endp code endsend start?
結果分析
1、
2、
3、
總結
以上是生活随笔為你收集整理的汇编语言——《子程序应用(数制转换)程序设计》实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言——《子程序应用(数制转换)程序
- 下一篇: 网络——Cisco Packet Tra