;程式執行後,提示輸入字串(字元數大於5個)。
;按右移鍵則字元以一定速率向右移動,移到右邊則字元再從左邊出來。
;按左移鍵,則字元向左移動,再從右邊出來.行號不變。
;;做而論道編寫的程式如下。
;***********************************
assume cs:cc, ds:qw
;-----------------------------------
qw segment
str db 81 dup (20h)
in_b db 20, ?, 20 dup (?)
fh db 0
tip1 db 'please input a string : $'
tip2 db 13, 10, 'you can press keys : '
db 27, 26, ' change direction,'
db 24, 25, ' change speed, esc exit. $'
dl_x dw 800 ;控制移動速度
max equ 3600 ;越大移動越慢
min equ 200 ;越小移動越快
qw ends
;-----------------------------------
cc segment
s_t:
mov ax, qw
mov ds, ax
mov ax, 0b800h
mov es, ax
;-------------------------
lea dx, tip1
mov ah, 9
int 21h
lea dx, in_b
mov ah, 10
int 21h
mov bl, in_b + 1
cmp bl, 5
ja go_on ;多於5個,就繼續
jmp exit ;不足,則退出
go_on:
mov bh, 0
lea dx, tip2
mov ah, 9
int 21h
mov cx, bx
mov si, 0
lp1:
mov al, in_b[si + 2]
mov str[si], al
inc si
loop lp1
m_loop:
call disp_str
call delay
mov ah, 1 ;
int 16h ;僅讀狀態
jz yids ;為零就是沒有按
mov ah, 0 ;按下則再讀
int 16h ;ah=掃瞄碼,al=ascii碼
cmp al, 27
je exit
cmp ah, 48h ;
je up
cmp ah, 50h
je dn
cmp ah, 4bh
je zl
cmp ah, 4dh
je zr
jmp yids ;轉去移動
;----------------------------------
up:cmp dl_x, min
jb yids
sub dl_x, 100
jmp yids
dn:cmp dl_x, max
ja yids
add dl_x, 100
jmp yids
zr: mov fh, 0 ;改變方向
jmp yids
zl: mov fh, 1
yids: ;移動
test fh, 1 ;判別方向
je rrr
call l_shift
jmp m_loop
rrr:
call r_shift
jmp m_loop
;---------------------------
exit:
mov ah, 4ch
int 21h
;-----------------------------------
delay:
push dx
push cx
mov dx, dl_x
mov cx, 0
dl_lp1:
nopnop
loop dl_lp1
dec dx
jnz dl_lp1
pop cx
pop dx
ret;-----------------------------------
disp_str:
mov si, 0
mov di, 0
mov ah, 4eh
mov cx, 80
lp2:
mov al, str[si]
mov es:[di + 12 * 160], ax
inc si
add di, 2
loop lp2
ret;-----------------------------------
r_shift:
mov si, 79
mov cx, 80
rs_loop:
mov al, str[si]
mov str[si + 1], al
dec si
loop rs_loop
mov al, str[80]
mov str[0], al
ret;-----------------------------------
l_shift:
mov si, 0
mov al, str[0]
mov str[80], al
mov cx, 80
ls_loop:
mov al, str[si + 1]
mov str[si], al
inc si
loop ls_loop
ret;-----------------------------------
cc ends
end s_t
;***********************************
以上程式經過編譯、連線、執行後,顯示的截圖如下:
在主頁的頁面,可以看到這篇文章已經插圖了,但是,開啟本頁面,卻不顯示插圖。
80x86組合語言 分類統計
組合語言的程式設計題!急 有100個學生成績,存放在以data為首址的位元組儲存單元中。試統計其中90 含90 以上的人數,60 90 含60 之間的人數,60以下的人數,分別存入max,middle,min三個變數中。15 分鐘前 做而論道 十七級 最快回答 assume ds qq,cs cc ...
組合語言 80x86定址方式
1 立即定址方式 立即定址方式中指令的運算元是8位或16位立即數,並直接出現在指令中。例如 mov al,10h 源運算元為立即定址 執行後al 10h mov ax,0a48h 源運算元為立即定址 執行後ax 0a48h 立即定址只能用於源運算元,不能用於目的運算元。2 暫存器定址方式 暫存器定址...
80x86組合語言程式設計P50
386 stack segment use32 db 200 dup 0 stack ends con equ 500 data segment use16 a dw m buf db ab 0dh,0ah b dw 0ffaah d dd buf m db 2 dup 1 2 dup 2,b 12...