1樓:匿名使用者
寫一下簡單的演算法吧,
先提供乙個簡單的畫點子程式:
;在螢幕顯示一點或一畫素子程式
;輸入引數:
; bx = 行位址(0-479)
; si = 列位址(0-639)
; dl = 顏色 (0-15)
; 640*480顯示模式
dot proc near
push cx ;儲存顏色
push dx
mov ax, 80 ;行位址
mul bx
mov di, ax ;儲存行位址
mov ax, si ;計算列位址
mov dh, 8
div dh
mov cl, ah ;得到移位數值
mov ah, 0
add di, ax ;構成畫素位址
mov al, 80h
shr al, cl ;計算相應位遮蔽暫存器中的位
push ax ;儲存位遮蔽字
mov dx, 3ceh ;圖形位址暫存器
mov al, 8 ;選擇位遮蔽暫存器
out dx, al
mov dx, 3cfh ;位遮蔽暫存器
pop ax ;得到位遮蔽暫存器
out dx, al
mov dx, 3c4h ;順序位址暫存器
mov al, 2 ;選擇映象遮蔽暫存器
out dx, al
mov dx, 3c5h ;映象遮蔽暫存器
mov al, 0fh ;使所有位平面均有效
out dx, al
mov al, es:[di] ;先讀
mov byte ptr es:[di], 0 ;清除原有顏色
pop ax ;從棧中恢復顏色
push ax
out dx, al
mov byte ptr es:[di], 0ffh ;寫記憶體
pop dx ;返回
pop cx
retdot endp
到時可以用macro來呼叫,比如:
setpixel macro x, y, color
mov bx, x
mov si, y
mov dl, color
call dot
endm
呼叫時用 setpixel x, y, color就可以了,color值為0-15
當然如果你用api的話,就更簡單了, 直接invoke setpixel x, y, color就可以了..
這裡提供的是對視訊記憶體和記憶體操作的setpixel
在主程式中要先做下列初始化:
mov ax, 0a000h ;視訊記憶體位址
mov es, ax
cld ;遞增
mov ax, 12h ;設定顯示模式為12h
int 10h ;清屏
然後提供乙個畫圖演算法, 我用巨集彙編寫的:
brshellipse xo, yo, r
mov xi, 0
mov yi, r ;這裡xi, yi是每次畫點的座標
mov delta, 2*(1-r)
.while yi >= 1
setpixel xo + xi, yo + yi, color
.if delta < 0
mov delta1, 2*delta+2*yi - 1
.if delta1 <= 0
inc xi
mov delta, delta+2*xi + 1
.else
inc xi
dec yi
mov delta, delta+2*xi-2*yi + 2
.endif
.elseif delta > 0
mov delta1, 2*delta - 2*xi - 1
.if delta1 <=0
inc xi
dec yi
mov delta, delta+2*xi-2*yi + 2
.else
dec yi
mov delta, delta-2*yi + 1
.else
inc xi
dec yi
mov delta, delta + 2*xi - 2*yi + 2
.endif
.endw
僅供參考, 沒有經過測試,
2樓:尼歐趙
關鍵是演算法,你自己把它翻譯成asm吧:
// bresenham 畫圓演算法基本例程void b_circle(int x0,int y0,int r,char color)
for(i=starty;i else x++; }x=y; if(y) for(i=starty;i 3樓:匿名使用者 演算法還不簡單嗎 用bios 的int 10h 中斷中的話畫素的方法實現。 確定某一行某一列的點位圓形,然後乙個迴圈,把所有於圓心距離相等的點都描出來就是乙個圓了,逐行掃瞄,每行應該最多有兩個點符合要求。 4樓:匿名使用者 熱鬧,分類達人前三全來了,我也進來look一下。 就是啥都看不懂 5樓:匿名使用者 關鍵是演算法,你自己把它翻譯成asm吧: 用組合語言編寫乙個簡單程式 6樓:sweet馮 1.計算u=(x+(y*z-100))/w 其中:x,y,z,w均為十六位有符號數。 程式如下: data segment x dw 10 ;16位變數 y dw 20 z dw 30 w dw 40 u dw ?,? data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ax,y imul z ;計算y*z,內容放在dx,ax中 mov cx,ax mov bx,dx sub cx,100 ;計算y*z-100 sbb bx, 0 mov ax,x cwd ;將x符號擴充套件,形成dx:ax中的雙字 add ax,cx ;計算x+(y*z-100),內容放在dx,ax中 adc dx,bx idiv w ;計算(x+(y*z-100))/w mov u,ax mov u+2,dx mov ah,4ch int 21h code ends end start 7樓:匿名使用者 push ax push bx pop ax pop bx 核心** 嚴格要求輸入 0 7。輸出為分別是 0 2 4 6 8 a c e。下列程式,可滿足題目要求。assume cs cccc segment i y db 02468ace s t mov ax,cc mov ds,axi x mov ah,07h int 21h cmp al,0 jb i x cm... 檔案,要先 建立 和 開啟 還要在其中定位,才能讀寫字元,之後要 關閉 要用到系統功能呼叫等等。至於磁碟的0面0道1扇區的讀寫,是更為低階 深入 的操作,要用到25h 絕對磁碟讀功能 26h 絕對磁碟寫功能。弄不好,會破壞磁碟檔案系統,造成系統的崩潰,不建議施行這個操作。xp有保護機制,一般不讓進行... 1.c,e 這個題出要考查幾條算術和邏輯指令,仔細一點就可以了。2 a,d b錯在數字大過了乙個位元組 c錯在用數字來標識標號了 e錯在用?號定義dup的次數 3 b,e 同一 c,d不影響al的值 4 a c d e 5 a b 1 將dl中小寫字母轉換為大寫,可用c e指令。a add dl,2...組合語言程式設計,組合語言程式設計?
怎樣用組合語言讀寫檔案
組合語言程式設計,組合語言程式設計步驟 有那幾步