寫這篇博客的目的呢,是因為某匯編老師要求的實驗報告;匯編代碼寫統計字串各字符個數的例子代碼網上很多,但我們要求的用debug下的-A命令撰寫,這就有點坑爹了~
因為是用debug命令撰寫,所以變數,代碼段什么的都沒有,所以規定:
用段暫存器存盤各字符個數:
ds[100] 存盤字串
ds[200] 存盤小寫字母個數
ds[210] 存盤大寫字母個數
ds[220] 存盤數字
ds[230] 存盤其他字符
注:可以自己規定地址存盤;
第一步:
使用-e命令向ds[100]中存入字串,可以使用-d命令查看存入情況:(右邊是字串,左邊是對應字符的16位ASCII碼)

第二步:
先看看代碼邏輯:
mov cx,15 ;回圈15次(loop指令所需)
mov si,100 ;存盤字串首地址
lop:
mov al,[si] ;將ds[si]字符的ASCII碼給al(即字串第一個字符)
cmp al,61 ;與'a'比較(這里需用字符對應ASCII碼)
jb b1 ;如果小于’a’跳轉到b1
cmp al,7A
ja b1 ;如果大于’z’跳轉b1
inc ds[200] ;不跳轉(即在a-z之間)小寫字母+1
jmp b4
b1:
cmp al,41
jb b2 ;如果小于’A’跳轉b2
cmp al,5A
ja b2 ;如果大于’Z’跳轉b2
inc ds[210] ;大寫字母+1
jmp b4
b2:
cmp al,30
jb b3 ;如果小于’0’跳轉b3
cmp al,39
ja b3 ;如果大于’9’跳轉b3
inc ds[220] ;數字+1
jmp b4
b3:
inc ds[230] ;其它字符+1
b4:
inc si ;取下一個字符
loop lop ;回圈
注:整體邏輯:取出一個字符依次與小寫字母,大寫字母,數字比較;在這之間的就對應字符++,并跳出去,不在就繼續往下,最后剩的是其他字符,(代碼邏輯并非最優,個人能力有限)
當然,在debug下略微有點差別:

注:因為debug下沒有lop,b1,b2…代碼段標志,所以只能jmp到對應代碼段地址,代碼起始地址為0100,如果不同jmp地址則需對應改變,
第三步:
通過-g=0100 0139運行代碼,
-d ds:200看看運行結果(懶得再編一次了,就不做演示),
個人原創,能力有限,如有錯誤,歡迎指正~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195752.html
標籤:python
