汇编语言 利用ASCII以及AND OR进行字符串大小写转换
生活随笔
收集整理的這篇文章主要介紹了
汇编语言 利用ASCII以及AND OR进行字符串大小写转换
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目要求
將datasg中的第一個字符串轉(zhuǎn)化為大寫,第二個字符串轉(zhuǎn)化為小寫
題目分析
注意:用al存放ascii即可
大寫對應(yīng)的ascii第五位是0,除了第五位以外不變
小寫對應(yīng)的ascii第五位是1,除了第五位以外不變
執(zhí)行過程
datasg數(shù)據(jù)存儲情況
下圖,可以看出BaSic和iNfOrMaTiOn是緊挨著存儲的
執(zhí)行完第一個循環(huán)s1后,前5個字母全部轉(zhuǎn)化為大寫
執(zhí)行完第二個循環(huán)s1后,后11個字母全部轉(zhuǎn)化為小寫
小bug
因為復(fù)制粘貼的時候大意了,遇到一個小bug,在這里記錄一下
每次一執(zhí)行第二個循環(huán),程序就崩,顯示Reboot requested, quitting now,單步跟蹤了一下,發(fā)現(xiàn)原來是這個問題:從循環(huán)s2跳到循環(huán)s1處,cx重新賦值為11,導(dǎo)致無限循環(huán)
改成s2就好了,正確代碼在下面
代碼
;將datasg中的第一個字符串轉(zhuǎn)化為大寫,第二個字符串轉(zhuǎn)化為小寫 ;注意用al存放ascii即可 ;大寫對應(yīng)的ascii小 assume cs:code,ds:datasgdatasg segmentdb 'BaSic'db 'iNfOrMaTiOn' datasg endscode segment start:;讓數(shù)據(jù)段寄存器ds指向datasg的起始地址mov ax,datasgmov ds,ax;循環(huán)取出前五個字節(jié)mov cx,5mov bx,0 s1: mov al,ds:[bx] ;(取出來)將一個字節(jié)數(shù)據(jù)放進al中and al,11011111b ;大寫對應(yīng)的ascii第五位是0,除了第五位以外不變mov ds:[bx],al ;(放回去)inc bx ;bx偏移++loop s1;;循環(huán)取出后11個字節(jié)mov cx,11 s2: mov al,ds:[bx] ;(取出來)將一個字節(jié)數(shù)據(jù)放進al中or al,00100000b ;小寫對應(yīng)的ascii第五位是1,除了第五位以外不變mov ds:[bx],al ;(放回去)inc bx ;bx偏移++loop s2;mov ax,4c00hint 21h code ends end start總結(jié)
以上是生活随笔為你收集整理的汇编语言 利用ASCII以及AND OR进行字符串大小写转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言 用push指令将a段中的前8个
- 下一篇: 汇编语言 循环嵌套 将datasg段中每