中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

做網(wǎng)站的榮譽證書網(wǎng)絡(luò)營銷這個專業(yè)怎么樣

做網(wǎng)站的榮譽證書,網(wǎng)絡(luò)營銷這個專業(yè)怎么樣,做頭像的日本網(wǎng)站,dw制作網(wǎng)站23.1 編寫malloc 參考第22天的內(nèi)容,在繪制窗口前先分配了150*50個字節(jié)大小的內(nèi)存,所以導致該文件經(jīng)編譯后有7.6k左右,能否在其中使用指針呢?當需要開辟空間時,移動指針即可。在之前的章節(jié)中也有函數(shù)memman_alloc函數(shù)可…

23.1 編寫malloc

參考第22天的內(nèi)容,在繪制窗口前先分配了150*50個字節(jié)大小的內(nèi)存,所以導致該文件經(jīng)編譯后有7.6k左右,能否在其中使用指針呢?當需要開辟空間時,移動指針即可。在之前的章節(jié)中也有函數(shù)memman_alloc函數(shù)可分配內(nèi)存空間,所以在該節(jié)中將都用到這個函數(shù)。
按照下表對api的設(shè)計,編寫a_nask.nas中的相關(guān)函數(shù),以及增加console.c文件中對edx的判斷。
memman 初始化
malloc
free
EDX=8
EBX=memman 的地址
EAX=memman 所管理的內(nèi)存空間的起始地址
ECX=memman 所管理的內(nèi)存空間的字節(jié)數(shù)
EDX=9
EBX=memman 的地址
ECX= 需要請求的字節(jié)數(shù)
EAX= 分配到的內(nèi)存空間地址
EDX=10
EBX=memman 的地址
EAX= 需要釋放的內(nèi)存空間地址
ECX= 需要釋放的字節(jié)數(shù)
_api_initmalloc:			; void api_initmalloc(void);PUSH 	EBXMOV 	EDX,8MOV 	EBX,[CS:0x0020] ; 初始化地址 P494頁 0x0020 (DWORD) ……malloc空間的起始地址MOV 	EAX,EBX ADD		EAX,32*1024		;分配了32k內(nèi)存MOV 	ECX,[CS:0x0000]SUB		ECX,EAX			;包括前32位數(shù)據(jù)(文件信息)以及32k內(nèi)存INT 	0x40POP 	EBXRET_api_malloc:				;char *api_malloc(int size)PUSH	EBXMOV		EDX,9MOV		EBX,[CS:0x0020]MOV		ECX,[ESP+8]		;sizeINT		0x40POP		EBXRET_api_free:					;void api_free(char *addr, int size)PUSH	EBXMOV		EDX,10MOV		EBX,[CS:0x0020]MOV		EAX,[ESP+8]		;addrMOV		ECX,[ESP+12]	;sizeINT		0x40POP		EBXRET

23.2 畫點

該節(jié)實現(xiàn)繪制一個點的功能,下面先介紹一下API的設(shè)計:
EDX =11
EBX = 窗口句柄
ESI = 顯示位置的 x 坐標
EDI = 顯示位置的 y 坐標
EAX = 色號
/*                a_nask.nas                */
_api_point:					;void api_point(int win, int x, int y, int col);PUSH	EDIPUSH	ESIPUSH	EBXMOV		EDX,11MOV		EBX,[ESP+16]	;winMOV		ESI,[ESP+20]	;xMOV		EDI,[ESP+24]	;yMOV		EAX,[ESP+28]	;colINT		0X40POP		EBXPOP		ESIPOP		EDIRET/*                console.c                */
if(edx == 11){//api_pointsht = (struct SHEET *) ebx;sht->buf[sht->bxsize * edi + esi] = eax;//修改某個點的顏色sheet_refresh(sht, esi, edi, esi + 1, edi + 1);
}

23.3 刷新窗口

考慮到每次繪制一個點都需要進行一次刷新,不如將所有點畫好后刷新一次畫面來的快,所以該節(jié)實現(xiàn) 刷新窗口的功能,下面先介紹一下API的設(shè)計:
EDX = 12
EBX = 窗口句柄
EAX = x0
ECX = y0
ESI = x1
EDI = y1
如下操作:sht = (struct SHEET *) (ebx&0xfffffffe);的目的為,窗口句柄歸根到底是struct SHEET的地址,這一定是一個偶數(shù),所以使ebx為字符串的地址進行運算。ebx&1 == 0是判斷ebx作為字符串的地址,是否為空,如果為空則刷新圖層。
/*                a_nask.nas                */
_api_refreshwin:			;void api_refreshwin(int win, int x0, int y0, int x1, int y1);PUSH	EDIPUSH	ESIPUSH	EBXMOV		EDX,12MOV		EBX,[ESP+16]	;winMOV		EAX,[ESP+20]	;x0MOV		ECX,[ESP+24]	;y0MOV		ESI,[ESP+28]	;x1MOV		EDI,[ESP+32]	;y1INT		0X40POP		EBXPOP		ESIPOP		EDIRET/*                console.c                */
int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax){(中略)if(edx == 1)cons_putchar(cons, eax&0xff, 1);else if(edx == 2)cons_putstr0(cons, (char*)ebx+ds_base);else if(edx == 3)cons_putstr1(cons, (char*)ebx+ds_base, ecx);else if(edx == 4)  return &(task->tss.esp0); else if(edx == 5){(中略)}else if(edx == 6){
/*這里*/sht = (struct SHEET *) (ebx&0xfffffffe);(中略)
/*這里*/if(ebx&1 == 0)
/*這里*/	sheet_refresh(sht, eax, ecx, esi + 1, edi + 1);}else if(edx == 8){//memman初始化(中略)}else if(edx == 9){//malloc(中略)}else if(edx == 10){//freeecx = (ecx+0x0f)&0xfffffff0;//所釋放的內(nèi)存空間的字節(jié)數(shù)memman_free((struct MEMMAN *) (ebx + ds_base), eax, ecx);}else if(edx == 11){//api_point
/*這里*/ sht = (struct SHEET *) (ebx&0xfffffffe);sht->buf[sht->bxsize * edi + esi] = eax;
/*這里*/ if(ebx&1 == 0)//當ebx的最低位為0,也就是沒有字符串需要打印時,刷新圖層
/*這里*/	sheet_refresh(sht, esi, edi, esi + 1, edi + 1);}else if(edx == 12){
/*這里*/ sht = (struct SHEET *) ebx;
/*這里*/ sheet_refresh(sht, eax, ecx, esi, edi);}return 0;
}

23.4 畫直線

在窗口上畫直線: EDX = 13?? EBX = 窗口句柄?? EAX = x0?? ECX = y0?? ESI = x1?? EDI = y1?? EBP = 色號??紤]畫的是直線,如果點間隙較大則會變成虛線,較小則會可能出現(xiàn)在一個坐標上多次花點浪費時間,所以選擇將坐標跨度較大的間隙分為1024,直接看代碼。
/*                a_nash.nas                */
_api_linewin:	;void api_linewin(int win, int x0, int y0, int x1, int y1, int col);PUSH	EDIPUSH	ESIPUSH	EBPPUSH	EBXMOV		EDX,13MOV		EBX,[ESP+20]	;winMOV		EAX,[ESP+24]	;x0MOV		ECX,[ESP+28]	;y0MOV		ESI,[ESP+32]	;x1MOV		EDI,[ESP+36]	;y1MOV		EBP,[ESP+40]	;colINT		0X40POP		EBXPOP		EBPPOP		ESIPOP		EDIRET/*                console.c                */
if(edx == 13){sht = (struct SHEET *) (ebx&0xfffffffe);hrb_api_linewin(sht, eax, ecx, esi, edi, ebp);if(ebx&1 == 0)//當ebx的最低位為0,也就是沒有字符串需要打印時,刷新圖層sheet_refresh(sht, eax, ecx, esi, edi);
}void hrb_api_linewin(struct SHEET *sht, int x0, int y0, int x1, int y1,int col){int i, x, y, len, dx, dy;dx = x1-x0;dy = y1-y0;x = x0<<10;y = y0<<10;if(dx < 0)dx = -dx;if(dy < 0)dy = -dy;if(dx >= dy){len = dx+1;if(x0 > x1)dx = -1024;else dx = 1024;if(y0 <= y1)dy = ((y1-y0+1)<<10)/len;else dy = ((y1-y0-1)<<10)/len;//-(y0-y1+1) = y1-y0-1}else{len = dy+1;if(y0 > y1)dy = -1024;else dy = 1024;if(x0 <= x1)dx = ((x1-x0+1)<<10)/len;else dx = ((x1-x0-1)<<10)/len;}for(i = 0; i < len; i++){sht->buf[(y>>10)*sht->bxsize+(x>>10)] = col;x += dx;y += dy;}return;
}

23.5 關(guān)閉窗口

關(guān)閉窗口:EDX=14?? EBX= 窗口句柄。sheet_free()函數(shù)是釋放已使用的圖層。
/*                a_nask.nas                */
_api_closewin:				;void api_closewin(int win);PUSH	EBXMOV 	EDX,14MOV		EBX,[ESP+8]		;winINT		0X40POP		EBXRET/*                console.c                */
if(edx == 14){//關(guān)閉窗口sheet_free((struct SHEET *) ebx);
}

23.6 鍵盤輸入API

該節(jié)主要實現(xiàn)的功能為:當按下回車鍵時關(guān)閉lines窗口。
鍵盤輸入:EDX = 15?? EAX = 0…… 沒有鍵盤輸入時返回 -1 ,不休眠
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = 1……休眠直到發(fā)生鍵盤輸入
????????????????????????????????????EAX = 輸入的字符編碼
參照console_task()函數(shù)編寫函數(shù),當eax!=0時則進入休眠狀態(tài),否則沒有鍵盤輸入返回值eax為-1(reg[7]存放的是寄存器eax)。當輸入鍵盤數(shù)據(jù)時,則更新eax寄存器中的值。
為了設(shè)置定時器我們需要 timer的地址,不過這是 console_task 中的變量,hrb_api是無法獲取的,所以在CONSOLE結(jié)構(gòu)體中增加元素struct TIMER *timer; 因此還修改了 console_task ,去掉 timer 變量,以 cons.timer 取而代之。
/*                a_nask.nas                */
_api_getkey:				;int api_getkey(int mode);MOV		EDX,15MOV		EAX,[ESP+4]INT		0X40RET/*                console.c                */
if(edx == 15){for(;;){io_cli();if(fifo32_status(&task->fifo) == 0){if(eax != 0)task_sleep(task);//休眠else{//沒有鍵盤輸入時返回-1,不休眠io_sti();reg[7] = -1;return 0;}}i = fifo32_get(&task->fifo);if(i <= 1){//光標/*應(yīng)用程序運行時不需要顯示光標,因此總是將下次顯示用的值置為1*/timer_init(cons->timer, &task->fifo, 1);timer_settime(cons->timer, 50);}if(i == 2)cons->cur_c = COL8_FFFFFF;/*光標ON */if(i == 3)cons->cur_c = -1;/*光標OFF */if(256 <= i && i <= 511){reg[7] = i-256;return 0;}}
}

23.7 強制結(jié)束并關(guān)閉窗口

在運行 walk.hrb lines.hrb 時,如果不按回車鍵結(jié)束,而是按Shift+F1強制結(jié)束程序的話,窗口就會殘留在畫面上。
首先,在 struct SHEET 中添加一個用來存放 task的成員,當應(yīng)用程序結(jié)束時,查詢所有的圖層,如果圖層的 task為將要結(jié)束的應(yīng)用程序任務(wù),則關(guān)閉該圖層。
int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline){int segsiz, datsiz, esp, dathrb;
/*這里*/struct SHEET *sht;
/*這里*/struct SHTCTL *shtctl;(中略)if (finfo != 0) {/* 找到了與字符串相同的文件 */p = (char *) memman_alloc_4k(memman, finfo->size);file_loadfile(finfo->clustno, finfo->size, p, fat, (char *) (ADR_DISKIMG + 0x003e00));if (finfo->size >= 36 && strncmp(p + 4, "Hari", 4) == 0 && *p == 0x00){(中略)start_app(0x1b, 1003 * 8, esp, 1004*8, &(task->tss.esp0));
/*從這里開始*/shtctl = (struct SHTCTL *) *((int *) 0x0fe4);/*從這里開始*/for(i = 0; i <  MAX_SHEETS; i++){sht = &(shtctl->sheets0[i]);if(sht->flags != 0 && sht->task == task)sheet_free(sht);
/*到這里結(jié)束*/}memman_free_4k(memman, (int) q, segsiz);}elsecons_putstr0(cons, ".hrb file format error.\n");memman_free_4k(memman, (int) p, finfo->size);cons_newline(cons);return 1;}return 0;
}
http://www.risenshineclean.com/news/8372.html

相關(guān)文章:

  • 幼兒園網(wǎng)站建設(shè)情況統(tǒng)計表西安優(yōu)化seo托管
  • 宿遷哪里做網(wǎng)站內(nèi)蒙古網(wǎng)站seo
  • 最權(quán)威的做網(wǎng)站設(shè)計公司價格搜索引擎營銷ppt
  • 鄭州網(wǎng)站seo分析湖南seo推廣系統(tǒng)
  • dede 汽車網(wǎng)站谷歌競價排名推廣公司
  • 東湖網(wǎng)站建設(shè)啥是網(wǎng)絡(luò)推廣
  • WordPress前端上傳大文件搜索引擎優(yōu)化seo名詞解釋
  • 做設(shè)計網(wǎng)站的工作百度快照優(yōu)化培訓班
  • 手機在線做ppt的網(wǎng)站有哪些最新的網(wǎng)絡(luò)營銷的案例
  • 做企業(yè)網(wǎng)站選百度云還是阿里云b2b網(wǎng)站推廣優(yōu)化
  • 成都營銷類網(wǎng)站設(shè)計如何優(yōu)化關(guān)鍵詞排名快速首頁
  • 免費自己生成網(wǎng)站泰安網(wǎng)絡(luò)推廣培訓
  • 網(wǎng)站網(wǎng)頁設(shè)計模板下載視頻seo優(yōu)化教程
  • 網(wǎng)站鏈接seo云優(yōu)化是什么意思
  • 如何在網(wǎng)上建立自己的網(wǎng)站torrentkitty搜索引擎
  • 備案號網(wǎng)站下邊軟文廣告經(jīng)典案例分析
  • 牡丹江市建設(shè)銀行門戶網(wǎng)站百度快照的作用是什么
  • 企業(yè)網(wǎng)站架構(gòu)體驗營銷是什么
  • 做網(wǎng)站的怎么辦理營業(yè)執(zhí)照seo輿情優(yōu)化
  • 池州專業(yè)網(wǎng)站建設(shè)怎么樣蘇州seo
  • wordpress ie8優(yōu)化軟件
  • 做h5的網(wǎng)站頁面設(shè)計廈門人才網(wǎng)個人會員
  • 丹陽疫情最新消息今天新增百度seo網(wǎng)站優(yōu)化服務(wù)
  • 網(wǎng)絡(luò)制作軟件seo型網(wǎng)站
  • 做電商網(wǎng)站哪里好優(yōu)化師助理
  • 個人博客網(wǎng)站模板源碼線上宣傳方式有哪些
  • 百度搜索網(wǎng)站在第一次輸入搜索內(nèi)容后點搜索鍵沒有反應(yīng)智慧軟文發(fā)稿平臺
  • 深圳網(wǎng)站設(shè)計公司如何寧波seo網(wǎng)絡(luò)推廣定制多少錢
  • 鼠標放到一級導航時才顯示網(wǎng)站二級導航 鼠標離開時不顯示 怎么控制站長統(tǒng)計app軟件
  • 西安做百度網(wǎng)站的seo優(yōu)化多少錢