汇编语言程序设计 实验6 分支程序设计
生活随笔
收集整理的這篇文章主要介紹了
汇编语言程序设计 实验6 分支程序设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文章為個人博客的備份版本、作者:小游、作者博客:點擊訪問
實驗目的:掌握分支程序的基本編程方法。熟悉數制轉換。用LOOP指令、條件轉移指令和向量地址法實現程序轉移。
1.編寫程序,如果輸人的是大寫字母,則輸出對應的小寫字母;如果輸入的是小寫字母則輸出對應的大寫字母;如果輸人的是數字,原樣輸出;按回車結束。
code segmentassume cs:code ; 代碼部分 start: inchr: ; 這里我們讀取鍵盤的輸入mov ah,1 ;輸入字符int 21h; 判斷我們鍵盤輸入的值al是否為回車,如果是那么cmp al,13 ; 這里是如果我們輸入的值為回車就直接退出 je exit; 這里是判斷 是否小于30('0'),如果不是也直接退出程序cmp al,30hjl exit; 這里我們如果輸入的是數字,我們就直接跳轉到輸出cmp al,39hjle outnum; 這里判斷是否輸入的是否為字母,如果不是那么也直接退出cmp al,41h jl exit;輸入為大寫字母,則跳轉 cmp al,5Ah jle outs; 這里判斷是否為小寫字母cmp al,61hjl exit;輸入為小寫則跳轉cmp al,7Ah jle outl ; 我們輸入的是數字的情況 outnum:; 直接al-30sub al,30h; 這里我們輸出數字,輸出完畢后我們直接跳轉到輸入部分繼續輸入mov dl,almov ah,2int 21hjmp inchr ; 這里是大寫字母的情況 outs: ;將輸入的大寫字母加上20h轉成小寫字母add al,20h; 輸出內容mov dl,almov ah,2int 21hjmp inchr outl:;同理,將小寫字母減去20h轉成大寫字母sub al,20h; 輸出內容mov dl,almov ah,2int 21hjmp inchr ; 退出程序 exit: mov ah,4chint 21h code endsend start2.分離字數組ARRAY中的正、負數, 把其中的正數復制到PDATA數組; 負數復制到NDAA數組、并分別統計正、負數個數。
; 我們這里定義一個數組里面并賦初值 DATAS SEGMENTarray dw 1,2,3,-4,5,-6,7,-8 DATAS ENDS ; 這里我們定義兩個數組,默認分配8位數據 ext segmentpdata dw 8 dup(?)ndata dw 8 dup(?)a db 30hb db 30h ext ends ; 代碼部分 CODES SEGMENTASSUME CS:CODES,DS:DATAS,es:extSTART:; 這里我們把數組放入ds中MOV AX,DATASMOV DS,AX; 我們把ext(就是我們自己定義的數組),放入es寄存器中mov ax,extmov es,ax; 同時我們分別把array數組的值,放入寄存器中lea bx,arraylea si,pdatalea di,ndata; cx置為8,表示比較次數mov cx,8T: ; 把array放入ax寄存器中 rmov ax,[bx]; 對ax和80000進行與運算,判斷array的值是否為正數(如果是負數,那么最高位就是1)test ax,8000h; 判斷ZF標志位是否為1,如果是1那么就跳轉到P(為1就說明這個值為正數)jz P; 我們這里就是負數的邏輯,我們把ax的值放入es:[di]中(也就是es數據段的負數哪里)mov es:[di],ax; a進行加1操作,用于統計負數的個數add a,1; 地址+2(因為我們的是16位的數,所以需要進行+2)add di,2; 跳到L去jmp LP: ; 這里是正數的計算邏輯,和上面一樣,這里不解釋了 mov es:[si],axadd b,1add si,2 L:; 數組的移動位數+1add bx,2; 我們再次循環,因為我們設置的cx為8。所以這里我們循環8次loop T; 輸出負數的個數mov dl, amov ah,2int 21h; 輸出空格mov dl,20hmov ah,2int 21h; 輸出正數的個數mov dl, bmov ah,2int 21h ; 結束程序 MOV AH,4CHINT 21H CODES ENDS end start3.在數據段定義分支地址表,通過鍵盤輸人數字1-8,實現轉移。要求:(1)分支表定義如下:P TABLE DW P 1, P 2, P 3, P 4, P 5, P 6, P 7、P 8 (2) PI~P 8為標號, 如果鍵盤輸人數字3, 則從分支地址表P TABLE中取出P 3的地址, 實現間接轉移,標號處的指令只是顯示一個信息。
;定義分支地址表 data segmentPTABLE dw p1,p2,p3,p4,p5,p6,p7,p8 data ends ; 代碼端 code segmentassume cs:code,ds:data start:mov ax,datamov ds,ax; 這里我們獲取鍵盤輸入的數字,無回顯mov ah,7 int 21h; 判斷我們輸入的數字是否合法,即判斷是否大于1小于7cmp al,31hjl exitcmp al,38hjg exit; 這里我們把輸入的值存入dl,用于后面輸出mov dl,al; 這里我們把al的值放入bl中mov bl,al; 我們把bl減去31h也就是把ascll碼轉換為數字sub bl,31h; 對bl進行左移操作shl bl,1 ;此操作將bl乘2,用于指向地址表中的地址(0,2,4,6,8,a,c,e); 這里PTABLE表中的內容來進行分支跳轉jmp PTABLE[bx] ;根據地址轉向對應分支 p1: mov ah,2 ;顯示輸入的數字,下同int 21hjmp exit p2: mov ah,2int 21hjmp exit p3: mov ah,2int 21hjmp exit p4: mov ah,2int 21hjmp exit p5: mov ah,2int 21hjmp exit p6: mov ah,2int 21hjmp exit p7: mov ah,2int 21hjmp exit p8: mov ah,2int 21hjmp exit exit: mov ah,4ch ;程序結束int 21h code endsend start總結
以上是生活随笔為你收集整理的汇编语言程序设计 实验6 分支程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab变压器损耗仿真,基于Matl
- 下一篇: 熊猫烧香源码分析_学习大熊猫分析