要求:從螢幕左上方開始逆時針用『a』畫乙個矩形。
首先知道螢幕長80字元、寬25字元,用x,y記錄當前位置,然後迴圈控制方向,到達邊界轉變方向即可。這裡做了點擴充套件,由外向內填滿整個螢幕。更多細節的完善和擴充套件請自行實現。
;des 表示方向 1下 2右 3上 四左效果圖如下:delay equ
500org 100h
start:
mov ax,cs
mov ds,ax
mov ss,ax
mov ax,0b800h
mov es,ax
mov
byte[char],'a'
loop: ;大迴圈,裡面有四個小迴圈
mov ax,word[i]
mov bx,
13sub ax,bx
jz end
mov ax,word[i]
mov word[y],ax
dec ax
mov word[x],ax
mov
byte[des],1
inc word[i]
down:
inc word[x]
mov bx,word[x]
mov ax,
26sub ax,word[i]
sub ax,bx
jz d2r
jmp show
d2r:
mov ax,
25sub ax,word[i]
mov word[x],ax
mov
byte[des],2
right:
inc word[y]
mov bx,word[y]
mov ax,
81sub ax,word[i]
sub ax,bx
jz r2u
jmp show
r2u:
mov ax,
80sub ax,word[i]
mov word[y],ax
mov
byte[des],3
up: dec word[x]
mov bx,word[x]
mov ax,-2
add ax,word[i]
sub ax,bx
jz u2l
jmp show
u2l:
mov ax,-1
add ax,word[i]
mov word[x],ax
mov
byte[des],4
left:
dec word[y]
mov bx,word[y]
mov ax,-1
add ax,word[i]
sub ax,bx
jz loop
jmp show
end:
jmp $
show: ;列印
xor ax,ax
mov ax,word[x]
mov bx,
80mul bx
add ax,word[y]
mov bx,
2mul bx
mov bp,ax
mov ah,0fh
mov al,
byte[char
] mov word[es:bp],ax
jmp loop_wait
loop_wait: ;延遲列印
dec word[count]
jnz loop_wait
mov word[count],delay
dec word[dcount]
jnz loop_wait
mov word[count],delay
mov word[dcount],delay
mov al,
1cmp al,
byte
[des]
jz down
mov al,
2cmp al,
byte
[des]
jz right
mov al,
3cmp al,
byte
[des]
jz up
mov al,
4cmp al,
byte
[des]
jz left
datadef:
count dw delay
dcount dw delay
i dw
0;當前層數
x dw
0;座標
y dw
0des db
1;方向初始化為向下
char db '
a'
組合語言程式格式
組合語言源程式中的每個語句可以由四項組成,格式如下 name operation operand comment 其中 名字項 name 是指乙個標號或變數。操作項 operation 是乙個操作碼的助記符,它可以是指令 偽指令或巨集指令名。運算元項 operand 由乙個或多個表示式組成,它提供為...
組合語言 子程式
舉例 子程式呼叫指令call 格式為 call 子程式名 call相當於jmp 子程式名 相當於 標號 子程式執行完返回到call下一句的語句執行 在子程式中用ret 返回 子程式名proc屬性 far,near 子程式名 endp 如果主程式是被執行的第乙個程式,屬性應為far 主程式 let0 ...
組合語言程式vs 匯程式設計序
組成原理 這是個常常被人拿來挖坑的地方。組合語言程式就是你用組合語言寫的文字型的程式,我們說用一堆助記符來寫的源 匯程式設計序是彙編階段用來把組合語言翻譯成機器語言指令的程式。二者是不同的概念。比如有些時候問,計算機能夠直接執行的是 a.機器語言程式 b.組合語言程式 c.硬體描述語言程式 組合語言...