汇编语言程序设计 实验7 循环程序设计
生活随笔
收集整理的這篇文章主要介紹了
汇编语言程序设计 实验7 循环程序设计
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文章為個人博客的備份版本、作者:小游、作者博客:點擊訪問
實驗目的:掌握循環(huán)程序的基本編程方法。提高循環(huán)程序編程技巧,熟悉鍵盤輸入、顯示輸出等基本人李本機交互實驗內(nèi)容
【1】從鍵盤輸入一個單個字符、顯示該字符的ASCI碼(十六進制) , 回車鍵退出循環(huán), 終止程序
; 代碼端定義 code segmentassume cs:code start:; 從鍵盤輸入一個字符mov ah,1int 21h; 判斷輸入的是否為字符cmp al,13je exit; 把al的值放入bh中,2放入cx中mov bh,almov cx,2L1:; 匯編rol命令是循環(huán)左移命令(注意,這里循環(huán)后不會丟棄位,這個位會出現(xiàn)在另一端)rol bx,1rol bx,1rol bx,1rol bx,1;連續(xù)循環(huán)左移4位; 我們在獲取bl的值放入al寄存器中mov al,bl; and是對操作數(shù)進行按位與操作and al,0fh;取最右四位; 把輸入的內(nèi)容轉(zhuǎn)換為ASCII碼add al,30h; 判斷的al是否為小于30h 也就是0cmp al,30hjc zhuhanshu;判斷是否是小于0的單個字符; 判斷我們輸入的是否為數(shù)字cmp al,39hjbe num;判斷是數(shù)字則跳轉(zhuǎn)到num; 判斷是否為大寫cmp al,41h jc zhuhanshu;因為顯示輸出的十六進制是數(shù)字和A~F,所以判斷字符得在A和F之間cmp al,46hjnbe zhuhanshuadd al,7;加上7表示字母的ASCII(因為數(shù)字和字母之間的ascll差7位)jmp output num: ; 如果是數(shù)字可以直接輸出 jmp output output:; 輸出al的值 mov dl,almov ah,2int 21h; 判斷al是否為字符cmp al,13jz start zhuhanshu:; 循環(huán)執(zhí)行來獲取下一位的內(nèi)容loop L1; 當cx為0的時候,說明已經(jīng)輸出完畢cmp cx,0jz start exit:; 退出程序 mov ah,4chint 21h code ends6 end start【2】從鍵盤輸人7位二進制數(shù)、顯示對應(yīng)的字符回車鍵退出循環(huán),終止程序。
code segmentassume cs:code start:; bl置為0,cx置為7 cx用于設(shè)置循環(huán)次數(shù) mov bl,0mov cx,7 L1: ; 這里獲取鍵盤的輸入mov ah,1int 21h; 因為二進制只有0和1,所以我們要判斷輸入的數(shù)字是否是0或1cmp al,30hjb exitcmp al,31hja exit; 輸入通過后我們對bl進行移位操作shl bl,1;算數(shù)左移,每輸入一個字符,執(zhí)行L1一次,BL向左移動一次; 把我們輸入的ascll碼轉(zhuǎn)換為0或者1sub al,30h;輸入是0/1; 進行與運算,獲取al的最低位and al,01h; 進行與運算,把al的最低位放到bl中add bl,al;將判斷之后的AL的值給BL,防止程序執(zhí)行過程中改變部分值; 繼續(xù)循環(huán),直到獲取完所有的數(shù)據(jù)loop L1output:; 這里我們輸出回車符號mov dl,13mov ah,2int 21hmov dl,10;輸出換行符mov ah,2int 21hmov dl,bl;輸出結(jié)果mov ah,2int 21hcmp cx,0;判斷是否上一個循環(huán)已經(jīng)完畢,并進行下一個循環(huán)jz start ; 退出程序 exit:mov ah,4chint 21hcode endsnd start【3】從鍵盤輸入一個四位的十六進制數(shù)(其中字母為大寫),并將其轉(zhuǎn)換為二進制數(shù)顯示輸出
;從鍵盤上接收4位16進制數(shù),并在屏幕上顯示與之等值的二進制數(shù) DATA SEGMENT; 定義一個變量,一個數(shù)組 NUM DW 0CRLF DB 0AH,0DH,'$' DATA ENDS ; 這里我們把數(shù)組放入棧中 STACK SEGMENT PARA STACKDW 128 DUP(?)TOP LABEL WORD STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA MAIN PROC FAR START:; DATA放入DS寄存器中MOV AX,DATAMOV DS,AX; STACK數(shù)據(jù)段放入SS中MOV AX,STACKMOV SS,AX; 這里我們把站頂?shù)牡刂贩湃隨P寄存器中LEA SP,TOP; 因為我們接受的是16進制數(shù),所以CX置為4表示循環(huán)次數(shù)MOV CX,4 ;循環(huán)接收4位16進制數(shù) L0: ; 這里我們獲取鍵盤輸入的內(nèi)容 MOV AH,1INT 21H; 這里我們判斷一下我們輸入的是數(shù)字還是字母CMP AL,40H ;若為A,B,C,D,E,F,則要先減去7再減去30H才能轉(zhuǎn)化為實際數(shù)JG L1 ;若為數(shù)字,則直接減去30H可轉(zhuǎn)化為實際數(shù)JL L2 L1: ; 這里是字母,我們需要先減去7,然后再減去30HSUB AL,07H L2: ; 這里是減去30后就變成了實際數(shù) SUB AL,30H; 我們把AX放入棧中保存PUSH AX; 把NUM放入AX中準備計算MOV AX,NUM; BX中放入16,后面我們需要用于乘法計算MOV BX,16 ; 這里我們進行無符號數(shù)乘法計算MUL BX; 我們把棧里面保存的數(shù)據(jù)存入BX中POP BXADC AL,BL ;從鍵盤輸入的數(shù)實際上存放在低8位中,相加時用ADC; 把最后的計算結(jié)果放入NUM寄存器中MOV NUM,AX; 繼續(xù)循環(huán)獲取下一位16進制的內(nèi)容LOOP L0; 輸出結(jié)果MOV AH,9; 把CRLF的地址放入DX中LEA DX,CRLFINT 21H; 因為4位16進制數(shù)轉(zhuǎn)換為2進制為16位,所以我們需要循環(huán)16次MOV CX,16; 計算結(jié)果放入BX寄存器中MOV BX,NUM1 L4: ;移位輸出,CF=1時直接輸出1,CF=0時將DL-1->DL再輸出0MOV DL,31H;進制之間的轉(zhuǎn)化多與移位運算相關(guān),SAL為移位函數(shù)SAL BX,1 JC L3DEC DL L3:; 輸出DL的值MOV AH,2INT 21HLOOP L4; 結(jié)束程序MOV AX,4C00HINT 21H CODE ENDS MAIN ENDP END START總結(jié)
以上是生活随笔為你收集整理的汇编语言程序设计 实验7 循环程序设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Keil使用PC-Lint
- 下一篇: 史蒂夫 乔布斯:遗失的访谈