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