




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1綜合應(yīng)用第2章硬指令和第3章偽指令,第4章從程序結(jié)構(gòu)角度展開程序設(shè)計,重點掌握:分支結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計子程序結(jié)構(gòu)程序設(shè)計2l順序程序結(jié)構(gòu)是指完全按順序逐條執(zhí)行的指令序列,這在程序段中是大量存在的,是最基本、最常見的程序結(jié)構(gòu),但作為完整的程序則很少見.model small.stack.dataxdw 5ydw 6zdw 7 .code.startupmov ax,xadd ax,yadd ax,zmov dl,al;入口參數(shù):dlalmov ah,2;02號dos功能調(diào)用int 21h;顯示一個ascii碼字符.exit 0end4l分支程序根據(jù)條件是真或假決定執(zhí)行與否l判斷的條件
2、是各種指令,如cmp、test等執(zhí)行后形成的狀態(tài)標志l轉(zhuǎn)移指令jcc和jmp可以實現(xiàn)分支控制;還可以采用masm 6.x提供的條件控制偽指令實現(xiàn)l條件成立跳轉(zhuǎn),否則順序執(zhí)行分支語句體;注意選擇正確的條件轉(zhuǎn)移指令和轉(zhuǎn)移目標地址cmp ax,0jns nonneg;分支條件:ax0neg ax;條件不滿足,求補nonneg: mov result,ax;條件滿足例:計算ax的絕對值條件成立跳轉(zhuǎn)執(zhí)行第2個分支語句體,否則順序執(zhí)行第1個分支語句體。注意第1個分支體后一定要有一個jmp指令跳到第2個分支體后shl bx,1;bx最高位移入cfjc one ;cf1,即最高位為1,轉(zhuǎn)移mov dl,0 ;
3、cf0,即最高位為0,dl0jmp two;一定要跳過另一個分支體one: mov dl,1;dl1two: mov ah,2int 21h;顯示mov dl,0;dl0shl bx,1;bx最高位移入cfjnc two ;cf0,最高位為0,轉(zhuǎn)移mov dl,1 ;cf1,最高位為1,dl1two: mov ah,2int 21h;顯示l多個條件對應(yīng)各自的分支語句體,哪個條件成立就轉(zhuǎn)入相應(yīng)分支體執(zhí)行。多分支可以化解為雙分支或單分支結(jié)構(gòu)的組合,例如: or ah,ah;等效于cmp ah,0 jz function0;ah0,轉(zhuǎn)向function0 dec ah;等效于cmp ah,1 jz
4、function1;ah1,轉(zhuǎn)向function1 dec ah;等效于cmp ah,2 jz function2;ah2,轉(zhuǎn)向function211ah=0fuction0ynah=1fuction1ynah=2fuction2yn12l需要在數(shù)據(jù)段事先安排一個按順序排列的轉(zhuǎn)移地址表l輸入的數(shù)字作為偏移量。因為只有2個字節(jié)16位偏移地址,所以偏移量需要乘2l關(guān)鍵是要理解間接尋址方式j(luò)mp指令地址表地址表分支分支1地址地址分支分支2地址地址.table db disp1, disp2, disp3, disp4, .datamsgdb input number(18):,0dh,0ah,$ms
5、g1db chapter 1 : .,0dh,0ah,$msg2db chapter 2 : .,0dh,0ah,$.msg8db chapter 8 : . ,0dh,0ah,$tabledw disp1,disp2,disp3,disp4dw disp5,disp6,disp7,disp8;取得各個標號的偏移地址此處等同于此處等同于 offset disp1start1:mov dx,offset msg;提示輸入數(shù)字mov ah,9int 21hmov ah,1;等待按鍵int 21hcmp al,1;數(shù)字 8?ja start1and ax,000fh;將ascii碼轉(zhuǎn)換成數(shù)字dec
6、axshl ax,1;等效于add ax,axmov bx,axjmp tablebx;(段內(nèi))間接轉(zhuǎn)移:iptable+bxstart2:mov ah,9int 21h.exit 0disp1:mov dx,offset msg1;處理程序1jmp start2.可以改為可以改為 call tablebx對應(yīng)修改為對應(yīng)修改為 ret16l循環(huán)結(jié)構(gòu)一般是根據(jù)某一條件判斷為真或假來確定是否重復(fù)執(zhí)行循環(huán)體l循環(huán)指令和轉(zhuǎn)移指令可以實現(xiàn)循環(huán)控制;還可以采用masm 6.x提供的循環(huán)控制偽指令實現(xiàn)17 結(jié)束結(jié)束 初始化初始化 循環(huán)的初始狀態(tài)循環(huán)的初始狀態(tài) 循環(huán)體循環(huán)體 循環(huán)的工作部分循環(huán)的工作部分及修改
7、部分及修改部分 計數(shù)控制循環(huán)計數(shù)控制循環(huán)條件控制循環(huán)條件控制循環(huán)修改部分修改部分控制條件控制條件y yn n.model small.stack.datasumdw ?.code.startupxor ax,ax;被加數(shù)ax清0mov cx,100again:add ax,cx;從100,99,.,2,1倒序累加loop againmov sum,ax;將累加和送入指定單元.exit 0end 計數(shù)控制循環(huán)計數(shù)控制循環(huán),循環(huán)次數(shù)固定循環(huán)次數(shù)固定 mov ah,1;從鍵盤輸入一個字符 int 21h mov bl,al;blal字符的ascii碼 ;dos功能會改變al內(nèi)容,故字符ascii碼存
8、入bl mov ah,2 mov dl,:;顯示一個分號,用于分隔 int 21h mov cx,8;cx8(循環(huán)次數(shù))again: shl bl,1;左移進cf,從高位開始顯示mov dl,0;mov指令不改變cfadc dl,30h;dl030hcf ;cf若是0,則dl0;若是1,則dl1mov ah,2int 21h;顯示loop again;cx減1,如果cx未減至0,則循環(huán)mov bx,offset stringagain:mov al,bx;取一個字符or al,al;是否為結(jié)尾符0jz done;是,退出循環(huán)cmp al,a;是否為大寫azjb nextcmp al,zja n
9、extor al,20h ;是,轉(zhuǎn)換為小寫字母(使d5=1)mov bx,al;仍保存在原位置next:inc bxjmp again;繼續(xù)循環(huán)done:.exit 0 條件控制循環(huán)條件控制循環(huán),利用標志退利用標志退出出大小寫字母僅大小寫字母僅 d d5 5位不同位不同21l“冒泡法”是一種排序算法,不是最優(yōu)的算法,但它易于理解和實現(xiàn)l冒泡法從第一個元素開始,依次對相鄰的兩個元素進行比較,使前一個元素不大于后一個元素;將所有元素比較完之后,最大的元素排到了最后;然后,除掉最后一個元素之外的元素依上述方法再進行比較,得到次大的元素排在后面;如此重復(fù),直至完成就實現(xiàn)元素從小到大的排序l這需要一個雙
10、重循環(huán)程序結(jié)構(gòu)序號 數(shù)比比 較較 遍遍 數(shù)數(shù)1234 1 32 2 85 3 16 4 15 5 8321615885161583285158163285815163285mov cx,count;cx數(shù)組元素個數(shù)dec cx;元素個數(shù)減1為外循環(huán)次數(shù)outlp: mov dx,cx;dx內(nèi)循環(huán)次數(shù)mov bx,offset arrayinlp:mov al,bx;取前一個元素cmp al,bx+1;與后一個元素比較jna next;前一個不大于后一個元素,則不進行交換xchg al,bx+1;否則,進行交換mov bx,alnext:inc bx;下一對元素dec dxjnz inlp;內(nèi)循
11、環(huán)尾loop outlp;外循環(huán)尾 計數(shù)控制雙重循環(huán)計數(shù)控制雙重循環(huán);現(xiàn)有一個以$結(jié)尾的字符串,要求剔除其中的空格.datastringdb let us have a try !,$.code.startupmov si,offset stringoutlp:cmp byte ptr di,$ ;外循環(huán),先判斷后循環(huán)jz done;為$結(jié)束cmp byte ptr si, ;檢測是否是空格jnz next;不是空格繼續(xù)循環(huán)mov di,si;是空格,進入剔除空格分支;該分支是循環(huán)程序段inlp:inc dimov al,di;前移一個位置mov di-1,alcmp byte ptr di,
12、$;內(nèi)循環(huán),先循環(huán)后判斷jnz inlpjmp outlpnext:inc si;繼續(xù)對后續(xù)字符進行處理jmp outlpdone:.exit 0;結(jié)束 條件控制雙重循環(huán)條件控制雙重循環(huán)26l把功能相對獨立的程序段單獨編寫和調(diào)試,作為一個相對獨立的模塊供程序使用,就形成子程序l子程序可以實現(xiàn)源程序的模塊化,可簡化源程序結(jié)構(gòu),可以提高編程效率格式格式: :過程名過程名 proc near|farproc near|far.過程名過程名endpendpl過程名(子程序名)為符合語法的標識符near屬性(段內(nèi)近調(diào)用)的過程只能被相同代碼段的其他程序調(diào)用far屬性(段間遠調(diào)用)的過程可以被相同或不同代
13、碼段的程序調(diào)用l對簡化段定義格式,在微型、小型和緊湊存儲模式下,過程的缺省屬性為near;在中型、大型和巨型存儲模式下,過程的缺省屬性為farl對完整段定義格式,過程的缺省屬性為nearl用戶可以在過程定義時用near或far改變?nèi)笔傩詓ubnameproc;具有缺省屬性的subname過程push ax ;保護寄存器:順序壓入堆棧push bx ;ax/bx/cx僅是示例push cx;過程體,程序的主要功能pop cx ;恢復(fù)寄存器:逆序彈出堆棧pop bxpop axret;過程返回subnameendp;過程結(jié)束;子程序功能:實現(xiàn)光標回車換行dpcrlfproc;過程開始push a
14、x;保護寄存器ax和dxpush dxmov dl,0dh;顯示回車mov ah,2int 21hmov dl,0ah;顯示換行mov ah,2int 21hpop dx;恢復(fù)寄存器dx和axpop axret;子程序返回dpcrlfendp;過程結(jié)束aldispproc;實現(xiàn)al內(nèi)容的顯示push ax;過程中使用了ax、cx和dxpush cxpush dxpush ax;暫存axmov dl,al;轉(zhuǎn)換al的高4位mov cl,4shr dl,clor dl,30h;al高4位變成3cmp dl,39hjbe aldisp1add dl,7;是0ah0fh,還要加上7aldisp1:mo
15、v ah,2;顯示int 21hpop dx;恢復(fù)原ax值到dxand dl,0fh;轉(zhuǎn)換al的低4位or dl,30hcmp dl,39hjbe aldisp2add dl,7aldisp2:mov ah,2;顯示int 21hpop dxpop cxpop axret;過程返回aldispendp.;主程序mov bx,offset array;調(diào)用程序段開始mov cx,countdisplp:mov al,bxcall aldisp;調(diào)用顯示過程mov dl,;顯示一個逗號,分隔數(shù)據(jù)mov ah,2int 21hinc bxloop displp;調(diào)用程序段結(jié)束.exit 0.;過程定
16、義endhtoascproc;將al低4位表達的一位16進制數(shù)轉(zhuǎn)換為ascii碼and al,0fhcmp al,9jbe htoasc1add al,37h;是0ah0fh,加37hret;子程序返回htoasc1:add al,30h;是09,加30hret;子程序返回htoascendp34l入口參數(shù)(輸入?yún)?shù)):主程序提供給子程序l出口參數(shù)(輸出參數(shù)):子程序返回給主程序l參數(shù)的形式: 數(shù)據(jù)本身(傳值) 數(shù)據(jù)的地址(傳址)l傳遞的方法: 寄存器 變量 堆棧35l子程序計算數(shù)組元素的“校驗和”l校驗和是指不記進位的累加入口參數(shù):數(shù)組的邏輯地址(傳址)元素個數(shù)(傳值)出口參數(shù):求和結(jié)果(傳
17、值)l把參數(shù)存于約定的寄存器中,可以傳值,也可以傳址。l子程序?qū)в谐隹趨?shù)的寄存器不能保護和恢復(fù)(主程序視具體情況進行保護)l子程序?qū)в腥肟趨?shù)的寄存器可以保護,也可以不保護;但最好一致入口參數(shù):cx元素個數(shù),ds:bx數(shù)組的段地址:偏移地址出口參數(shù):al校驗和.startup ;設(shè)置入口參數(shù)(含有ds數(shù)組的段地址)mov bx,offset array ;bx數(shù)組的偏移地址mov cx,count;cx數(shù)組的元素個數(shù)call checksuma;調(diào)用求和過程mov result,al;處理出口參數(shù).exit 0checksumaprocxor al,al;累加器清0suma:add al
18、,bx;求和inc bx;指向下一個字節(jié)loop sumaretchecksumaendpendl主程序和子程序直接采用同一個變量名共享同一個變量,實現(xiàn)參數(shù)的傳遞l不同模塊間共享時,需要聲明入口參數(shù):count元素個數(shù),array數(shù)組名(含段地址:偏移地址)出口參數(shù):result校驗和;主程序 call checksumb;子程序checksumbprocpush axpush bxpush cxxor al,al;累加器清0mov bx,offset array;bx數(shù)組的偏移地址mov cx,count;cx數(shù)組的元素個數(shù)sumb:add al,bx;求和inc bxloop sumbmo
19、v result,al ;保存校驗和pop cxpop bxpop axretchecksumbendpl主程序?qū)⒆映绦虻娜肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù)l子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們?nèi)肟趨?shù):順序壓入偏移地址和元素個數(shù)出口參數(shù):al校驗和.startupmov ax,offset arraypush axmov ax,countpush axcall checksumcadd sp,4mov result,al.exit 0 要注意堆棧的分配情況,保證參數(shù)存取正確、子程序正要注意堆棧的分配情況,保證參數(shù)存取正確、子程序正確返回,并保持堆棧平衡確返回,并保持堆棧平衡
20、checksumcprocpush bpmov bp,sp;利用bp間接尋址存取參數(shù)push bxpush cxmov bx,bp+6 ;ss:bp+6指向偏移地址mov cx,bp+4 ;ss:bp+4指向元素個數(shù)xor al,alsumc:add al,bx inc bxloop sumcpop cxpop bxpop bpretchecksumcendp45 主程序?qū)崿F(xiàn)平衡堆棧:主程序?qū)崿F(xiàn)平衡堆棧: add sp,n 子程序?qū)崿F(xiàn)平衡堆棧:子程序?qū)崿F(xiàn)平衡堆棧: ret n46子程序內(nèi)包含有子程序的調(diào)用就是子程序嵌套沒有什么特殊要求aldispprocpush axpush cx;實現(xiàn)al內(nèi)
21、容的顯示push ax;暫存axmov cl,4shr al,cl;轉(zhuǎn)換al的高4位call htoasc;子程序調(diào)用(嵌套)pop ax;轉(zhuǎn)換al的低4位call htoasc;子程序調(diào)用(嵌套)pop cxpop axretaldispendp;將al低4位表達的一位16進制數(shù)轉(zhuǎn)換為ascii碼htoascprocpush axpush bxpush dxmov bx,offset ascii;bx指向ascii碼表and al,0fh;取得一位16進制數(shù)xlat cs:ascii;換碼:alcs:bxal,注意數(shù)據(jù)在代碼段cs mov dl,al;顯示mov ah,2int 21hpop
22、 dxpop bxpop axret;子程序返回;子程序的數(shù)據(jù)區(qū)asciidb 30h,31h,32h,33h,34h,35h,36h,37hdb 38h,39h,41h,42h,43h,44h,45h,46hhtoascendp 這是一個具有局部變量的子程序。因為數(shù)據(jù)區(qū)與子程序都在代碼段,所以利用了換碼指令xlat的另一種助記格式(寫出指向緩沖區(qū)的變量名,目的是便于指明段超越前綴)。串操作movs、lods和cmps指令也可以這樣使用,以便使用段超越前綴 除采用段超越方法外,子程序與主程序的數(shù)據(jù)段不同時,我們還可以通過修改ds值實現(xiàn)數(shù)據(jù)存?。坏枰Wo和恢復(fù)ds寄存器50l當(dāng)子程序直接或間接
23、地嵌套調(diào)用自身時稱為遞歸調(diào)用,含有遞歸調(diào)用的子程序稱為遞歸子程序l遞歸子程序必須采用寄存器或堆棧傳遞參數(shù),遞歸深度受堆??臻g的限制例:求階乘 n!= n*(n-1)! 當(dāng)n0 1 當(dāng)n=0.model small.stack 256.datandw 3resultdw ?.code.startupmov bx,npush bx;入口參數(shù):ncall fact;調(diào)用遞歸子程序pop result;出口參數(shù):n!.exit 0;計算n!的近過程;入口參數(shù):壓入 n;出口參數(shù):彈出 n!fact procpush axpush bpmov bp,spmov ax,bp+6 ;取入口參數(shù) ncmp a
24、x,0jne fact1;n0,n!n(n-1)!inc ax;n0,n!1jmp fact2fact1:dec ax;n-1push axcall fact;調(diào)用遞歸子程序求(n-1)!pop axmul word ptr bp+6 ;求 n(n-1)!fact2:mov bp+6,ax ;存入出口參數(shù) n!pop bppop axretfactendp調(diào)用時進棧調(diào)用時進棧返回時出棧返回時出棧13!2!1!55l子程序的重入是指子程序被中斷后又被中斷服務(wù)程序所調(diào)用,能夠重入的子程序稱為可重入子程序。在子程序中,注意利用寄存器和堆棧傳遞參數(shù)和存放臨時數(shù)據(jù),而不要使用固定的存儲單元(變量),就能
25、夠?qū)崿F(xiàn)重入。l子程序的重入不同于子程序的遞歸。重入是被動地進入,而遞歸是主動地進入;重入的調(diào)用間往往沒有關(guān)系,而遞歸的調(diào)用間卻是密切相關(guān)的。遞歸子程序也是可重入子程序。56 首先判斷輸入為正或負數(shù),并用一個寄存器記錄 接著輸入09數(shù)字(ascii碼),并減30h轉(zhuǎn)換為二進制數(shù) 然后將前面輸入的數(shù)值乘10,并與剛輸入的數(shù)字相加得到新的數(shù)值 重復(fù)、步,直到輸入一個非數(shù)字字符結(jié)束 負數(shù)進行求補,轉(zhuǎn)換成補碼;否則直接保存數(shù)值l本例采用16位寄存器表達數(shù)據(jù),所以只能輸入32767732768間的數(shù)值l但該算法適合更大范圍的數(shù)據(jù)57l子程序從鍵盤輸入一個有符號十進制數(shù);子程序還包含將ascii碼轉(zhuǎn)換為二進
26、制數(shù)的過程l輸入時,負數(shù)用“”引導(dǎo),正數(shù)直接輸入或用“”引導(dǎo)l子程序用寄存器傳遞出口參數(shù),主程序調(diào)用該子程序輸入10個數(shù)據(jù).datacount= 10arraydw count dup(0);預(yù)留數(shù)據(jù)存儲空間.code.startupmov cx,countmov bx,offset arrayagain:call read;調(diào)用子程序輸入一個數(shù)據(jù)mov bx,ax;將出口參數(shù)存放緩沖區(qū)inc bxinc bxcall dpcrlf;調(diào)用子程序,光標回車換行以便輸入下一個數(shù)據(jù)loop again.exit 0;輸入有符號10進制數(shù)的通用子程序;出口參數(shù):ax補碼表示的二進制數(shù)值;說明:負數(shù)用“
27、”引導(dǎo),正數(shù)用“”引導(dǎo)或直接輸入;數(shù)據(jù)范圍是3276732768readprocpush bxpush cxpush dxxor bx,bx;bx保存結(jié)果xor cx,cx;cx為正負標志,0為正,1為負mov ah,1;輸入一個字符int 21hcmp al,+;是“”,繼續(xù)輸入字符jz read1cmp al,-;是“”,設(shè)置1標志jnz read2;非“”和“”,轉(zhuǎn)read2mov cx,-1read1:mov ah,1;繼續(xù)輸入字符int 21hread2:cmp al,0;不是09之間的字符,則輸入數(shù)據(jù)結(jié)束jb read3cmp al,9ja read3sub al,30h;是09之
28、間的字符,則轉(zhuǎn)換為二進制數(shù);利用移位指令,實現(xiàn)數(shù)值乘10:bxbx10shl bx,1mov dx,bxshl bx,1shl bx,1add bx,dx;bx內(nèi)容乘10mov ah,0add bx,ax;已輸入數(shù)值乘10后,與新輸入數(shù)值相加jmp read1;繼續(xù)輸入字符read3:cmp cx,0jz read4neg bx;是負數(shù),進行求補read4:mov ax,bx;設(shè)置出口參數(shù)pop dxpop cxpop bxret;子程序返回readendp;使光標回車換行的子程序dpcrlfproc.;省略dpcrlfendpend63 首先判斷數(shù)據(jù)是零、正數(shù)或負數(shù),是零顯示“0”退出 是負數(shù),顯示“”,求數(shù)據(jù)的絕對值; 接著數(shù)據(jù)除以10,余數(shù)加30h轉(zhuǎn)換為ascii碼壓入堆棧 重復(fù)步,直到余數(shù)為0結(jié)束 依次從堆棧彈出各位數(shù)字,進行顯示l本例采用16位寄存器表達數(shù)據(jù),所以只能顯示32767732768間的數(shù)值l但該算法適合更大范圍的數(shù)據(jù)64l子程序在屏幕上顯示一個有符號十進制數(shù);子程序還包含將二進制數(shù)轉(zhuǎn)換為ascii碼的過程l顯示時,負數(shù)用“”引導(dǎo),正數(shù)直接輸出、沒有前導(dǎo)字符l子程序的入口參數(shù)用共享變量傳遞,主程序調(diào)用該子程序顯示10個數(shù)據(jù).datacount= 10arraydw 1234,-1234,0,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 6730.90-2025鐵礦石金、銀、鉑、鈀含量的測定電感耦合等離子體質(zhì)譜法
- 材料疲勞裂紋萌生研究進展重點基礎(chǔ)知識點
- 物業(yè)高層火災(zāi)應(yīng)急預(yù)案(3篇)
- 化工廠消防火災(zāi)應(yīng)急預(yù)案(3篇)
- 總體經(jīng)濟政策的目標與措施試題及答案
- 兒科發(fā)生火災(zāi)的應(yīng)急預(yù)案(3篇)
- 2025年軟件設(shè)計師考試的自我激勵策略試題及答案
- 行政管理分析試題及答案解析
- 火災(zāi)及處突應(yīng)急預(yù)案(3篇)
- 2025年軟考網(wǎng)絡(luò)管理員科研能力試題及答案
- 15D501 建筑物防雷設(shè)施安裝
- 取水泵站施工方案
- 醫(yī)療糾紛應(yīng)急處置預(yù)案
- (新教材)細胞核是細胞生命活動的控制中心(公開課)課件
- 教師職業(yè)道德與專業(yè)發(fā)展智慧樹知到課后章節(jié)答案2023年下山東師范大學(xué)
- 企業(yè)安全生產(chǎn)風(fēng)險辨識評估管控指導(dǎo)手冊-危險貨物儲罐倉儲
- 監(jiān)控立桿基礎(chǔ)國家標準
- 大病歷體格檢查-系統(tǒng)回顧(精簡版)
- 濟南出入境檢驗檢疫局國際旅行衛(wèi)生保健中心
- 黑土地知識科學(xué)普及-黑土地保護法宣貫課件
- 毛尖茶葉批生產(chǎn)記錄匯總
評論
0/150
提交評論