從鍵盤輸入乙個字串(長度不超過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 遞迴注意事項 遞迴雖然經典,但是也有他的缺點 第一 遞迴是反...