微機原理程序“大小寫轉換”問題詳細講解

> 大小寫轉換問題,先看一下大小寫字母的ASCII碼值
A       十六進制 41H    十進制65
B       十六進制 42H    十進制66
C       十六進制 43H    十進制67
D       十六進制 44H    十進制68
E       十六進制 45H    十進制69
F       十六進制 46H    十進制70
a 	    十六進制 61H	   十進制97
b 	    十六進制 62H	   十進制98
c 	    十六進制 63H	   十進制99
d       十六進制 64H	   十進制100
e  	    十六進制 65H    十進制101
f 	    十六進制 66H	   十進制102
> A     十六進制 41H    0100 0001 
> B     十六進制 42H    0100 0010 
> C     十六進制 43H    0100 0011 
> D     十六進制 44H    0100 0100 
> E     十六進制 45H    0100 0101 
> F     十六進制 46H    0100 0110 
> a 	十六進制 61H    0110 0001
> b 	十六進制 62H    0110 0010 
> c     十六進制 63H	   0110 0011
> d 	十六進制 64H	   0110 0100 
> e 	十六進制 65H    0110 0101 
> f     十六進制66H	   0110 0110

1例如:大寫F 轉換成小寫f
F 十六進制 46H 0100 0110
加上 or指令 0010 0000就可以了
0110 0110

2例如:e轉換大寫E
e 十六進制65H 0110 0101
加上and指令 1101 1111
0100 0101

其中會運用到and指令和or指令

and:指令就是與運算將相對應的位,只要兩位都爲1。運算結果才爲1,其餘都爲0
就是將相對應的位 設置爲0 其它位不變

mov al, 00001010B
and al, 00001111B
		00001010B

or:指令就是或運算 將相對應的位,只要有一個是1。那麼運算結果就是1

mov al,00001111B
or al, 11110000B
   	   11111111B

下列具體例子展示:

小寫轉大寫
assume cs:code,ds:data,ss:stack    		;這裏的cs表示代碼段,ds數據段 ,ss棧段
data segment
	db	'Basci'						;將字符串轉換成大寫
data ends
stack segment stack			;設置棧段
		    	dw	0,0,0,0
		    	dw	0,0,0,0
		    	dw	0,0,0,0
		    	dw	0,0,0,0
stack ends
code segment						;設置代碼段
		stack: mov bx,stack
			   mov ss,bx					;棧段ss 用來接收stack
			   mov sp,128					;設置棧頂指針地址
		 	   mov bx,data			
			   mov ds,bx           ;數據段ds接收data傳送的值
			   mov bx,0				;偏移地址爲0
		       mov cx,5     			;循環轉換字母5次
		       
upLetter:   mov al,ds:[bx]
			and al,11011111B      ;使用and指令完成轉換
			mov ds:[bx],al	           ;在將al,bx值返回
			inc bx          					;bx加一執行下一條數據
			loop upLetter    			;這裏的loop是循環指令
			
			mov ax,4c00h
			int 21H    ;這兩條指令是程序返回    

在這裏插入圖片描述
大寫轉小寫

assume cs:code,ds:data,ss:stack			;這裏的cs表示代碼段,ds數據段 ,ss棧段
data segment 		;數據段
	db	'iNfOrHaTIon'			;將字符串轉換成小寫
data ends
stack segment stack			;棧段
		    	dw	0,0,0,0
		    	dw	0,0,0,0
		    	dw	0,0,0,0
		    	dw	0,0,0,0
stack ends
code segment						;代碼段
    		stack: mov bx,stack
		       	   mov ss,bx
		    	   mov sp,128
		    	   mov bx,data
		    	   mov ds,bx
		    	   mov bx,0				;這裏的偏移地址0是根據,所改變的值得第一位開始計算
		           mov cx,11
downLetter:   mov al,ds:[bx]
			  or al,00100000B     ;要注意這裏的改變,因爲是大寫轉小寫了,所有要使用or指令
		      mov ds:[bx],al
			  inc bx
			  loop downLetter
			  
			  mov ax,4c00h
			  int 21H    ;這兩條指令是程序返回    

在這裏插入圖片描述

有錯誤的地方還請大家指點,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章