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