彙編那些事兒

2021-10-05 23:25:05 字數 2248 閱讀 5178

從鍵盤輸入乙個字串(長度不超過30),統計字串中非數字的個數,將統計的結果顯示在螢幕上,並閃爍輸出字母,用exe格式實現。

data segment

str db 30,?,30 dup(?)

mess1 db 0ah,0ah,'please input string <30',0ah,0dh,'$'

mess2 db 0ah,0dh,'counts',0ah,0dh,'$'

mess3 db 0ah,0dh,'light show',0ah,0dh,'$'

count db 0

data ends

stack segment

dw 10 dup(10)

stack ends

code segment

assume cs:code,ds:data,es:data,ss:stack

main proc far

start:

mov ax,data

mov ds,ax

mov es,ax

call input

call outputa

call outputb

mov ax,4c00h

int 21h

main endp

input proc near

lea dx,mess1

mov ah,09h

int 21h

lea dx,str

mov ah,0ah

int 21h

retoutputa proc near

lea dx,mess2

mov ah,09h

int 21h

lea si,str+2

mov cl,str+1

mov ch,0

cld;方向標誌位清零

l3: lodsb;從串中取資料到al

cmp al,'a'

jb l2 ;小於『a』說明是非字母

cmp al,'z'

ja l2 ;大於『z』說明是非字母

cmp al,'z'

jbe l1 ;小於等於『z』說明是字母計數

cmp al,'a'

jae l1 ;大於等於『a』說明是字母計數

l1:

inc count

l2: loop l3

mov ax,word ptr count

mov bl,10

div bl

mov bh,ah

mov dl,al

add dl,30h

mov ah,02h

int 21h

mov dl,bh

add dl,30h

mov ah,02h

int 21h

retoutputb proc near

lea dx,mess3

mov ah,09h

int 21h

lea si,str+2

mov cl,str+1

mov ch,0

cldl5: push cx

lodsb

cmp al,'a'

jb l4

cmp al,'z'

ja l4

cmp al,'z'

jbe l6 ;小於等於『z』說明是字母

cmp al,'a'

jae l6 ;大於等於『a』說明是字母

l6: mov bl,11001111b

mov bh,0

mov cx,1;字元輸出1次

mov ah,09h

int 10h

mov ah,03h;移動游標,如果沒有這段指令,假如樣例為abc123,最後就只能閃爍輸出c,我是這麼理解的,不一定對

int 10h

inc dl

mov ah,02h

int 10h

;設定游標位置,我覺得就是假如沒有這段指令,最後只能輸出a

半吊子水平,不一定對,如果理解有誤,煩請指正,麻煩大佬了

鏈結那些事兒

鏈結,就是將不同部分的 和資料收集和組合成為乙個單一檔案的過程,這個檔案可被載入到儲存器中執行。鏈結可以執行於編譯時 compile time 也就是源 被翻譯成機器 時 eg.普通的鏈結器鏈結,以及靜態鏈結庫,由靜態鏈結器鏈結 也可以執行於載入時 例如動態鏈結庫的載入時鏈結 也可以執行於執行時 r...

指標那些事兒

1.野指標 也叫懸擺指標,迷失指標 野指標是導致bug的罪魁禍首之一。對指標呼叫delete後 釋放掉了它指向的記憶體,野指標還是指向原來的位址 如果沒有重新賦值就使用它,將導致難以預料的後果。因為此時操作野指標,它指向的記憶體位址可能已經分配給其他變數在使用了。所以指標在delete之後,如果不再...

遞迴那些事兒

include include include include 求階乘 int fac int n if n 1 求累加 int add int n 求字串長度 int my strlen const char dest int main 遞迴注意事項 遞迴雖然經典,但是也有他的缺點 第一 遞迴是反...