




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章指令系統【本章提要】本章重點講述IA-32系列CPU的常用指令,和支持EM64T技術的高級Pentium4以及Core系列CPU的Intel64指令系統?!緦W習目標】熟練掌握匯編語言各種指令的功能和操作數在內存的存放規(guī)律掌握各種指令對操作數和尋址方式的特殊要求,明確不同指令對標志寄存器的具體影響等方面熟悉CPU內部各寄存器的使用規(guī)則及其在指令執(zhí)行過程中的隱含約定2023/1/1680X86指令集8086指令集PentiumX指令集Core2指令集指令系統是CPU所能執(zhí)行的各種指令的集合,定義了計算機硬件所能完成的基本操作,不同的CPU有不同的指令系統。8086/8088CPU的指令系統是基本指令集,80X86、PentiumX以及Core2系列的指令系統保留了基本指令集,又進行了擴充。4.1指令系統概述2023/1/168086/8088指令系統是基本指令集,指令的操作數寬度是8位或16位,偏移地址寬度是16位。IA-32擴充指令和系統控制指令的操作數寬度可以是8位、16位或32位,偏移地址寬度一般是32位。64位方式指令的操作數可以是8位、16位、32位或64位,操作數的偏移地址可以是16位、32位或64位。指令系統大體可以分成7個功能組:數據傳送類、算術運算類、邏輯運算與移位類、串操作類、控制轉移類、處理器控制和其他類。2023/1/164.2數據傳送類指令指令書寫格式指令功能MOVREG/MEM/SEG,REG/MEM/SEG/IMMXCHGREG/MEM,REG/MEMXLATBS從SRC傳送到DEST交換兩個操作數的內容字節(jié)翻譯字節(jié)交換指令(486新增)通用數據傳送堆棧操作地址傳送標志位傳送I/O數據傳送傳送類指令執(zhí)行后對標志位都沒有影響(除SAHF、POPF和POPFD外)。4.2.1通用數據傳送指令
2023/1/16(1)MOV指令指令格式:MOVOPRD1,OPRD2功能:將源操作數傳送給目標操作數【例】MOVAL,BH;通用寄存器之間傳送字節(jié)數據
MOVDS,AX
;通用寄存器與段寄存器(CS不能是目標)之間傳送數據
MOVEAX,12345678H;立即數傳送到通用寄存器
MOVRAX,BUFFER
;通用寄存器與存儲器之間64位數據傳送
MOVDAT[BP+DI],ES
;段寄存器與存儲器之間傳送數據2023/1/16MOV指令操作數要求段寄存器DS/CS/SS/ES/FS/GS通用寄存器8位、16位、32位、64位存儲器立即數8位、16位、32位、64位注意:①立即數和段寄存器CS不能作為目標操作數;②立即數不能直接傳送到段寄存器;③兩個存儲單元之間不能直接傳送數據;④兩個段寄存器之間不能直接傳送數據;⑤兩個操作數寬度必須一致。2023/1/16(3)查表轉換指令XLAT指令格式:XLAT功能:完成一個字節(jié)的查表轉換,將數據段中偏移地址為BX/ebx/RBX與AL寄存器之和的存儲單元的內容送入AL寄存器,即:[BX+AL]→AL。例:若(BX)=0100H,(AL)=05H,執(zhí)行XLAT指令后,(AL)=2CH。注意:由于AL只有8位,所以表的長度不能超過256字節(jié)。2023/1/16(4)字節(jié)交換指令BSWAP是80486新增的指令指令格式:BS功能:將32位通用寄存器中的雙字以字節(jié)為單位進行高、低字節(jié)交換,改變雙字數據的存放方式。指令執(zhí)行時,字節(jié)0(b0~b7)與字節(jié)3(b24~b31)交換,字節(jié)1(b8~b15)與字節(jié)2(b16~b23)交換。字節(jié)3字節(jié)2字節(jié)1字節(jié)02023/1/164.2.2堆棧操作指令指令書寫格式指令功能PUSHREG/MEM/SEGPOPREG/MEM/SEGPUSHIMMPUSHAPOPAPUSHADPOPAD壓入堆棧彈出堆棧IMM擴展為16/32位后進棧(286新增)8個16位通用寄存器進棧(286新增)8個16位通用寄存器出棧(286新增)8個32位通用寄存器進棧(386新增)8個32位通用寄存器出棧(386新增)(1)PUSH/POP
堆棧是內存的一個數據區(qū),是按照先進后出原則組織的一段內存區(qū)域,段寄存器SS指向段基址,堆棧指針SP始終指向堆棧的頂部。
PUSHREG16/REG32/REG64/MEM16/MEM32/MEM64POPREG16/REG32/REG64/MEM16/MEM32/MEM642023/1/16(2)PUSH/PUSHA/POPA是80286新增的指令指令格式:PUSH imm16PUSHAPOPA指令功能:
①PUSHimm16將字立即數壓入堆棧,如果給出的數不夠16位,它會在自動擴展后壓入堆棧;
②PUSHA指令將所有通用寄存器的內容壓入堆棧,壓入的順序是:AX、CX、DX、BX、SP、BP、SI、DI;③POPA指令將棧頂內容彈出,順序與壓入的相反(彈出到SP的值被丟棄)。2023/1/16(3)PUSHAD/POPAD386新增指令PUSHAD指令將所有擴展通用寄存器的內容壓入堆棧,壓入的順序是:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI;POPAD彈出的順序與PUSHAD壓入的相反(彈出到ESP的值被丟棄)。注意:在64位模式下,入棧和出棧指令的操作數只能是16位或64位,不支持32位操作數。
2023/1/164.2.3地址傳送指令(1)有效地址傳送指令LEA指令格式:LEAREG16/REG32/REG64,MEM功能:將源操作數在當前段內的有效地址(即地址偏移量)傳送至目標操作數。區(qū)別:MOV指令傳送操作數的內容,而LEA傳送的是操作數的地址。MOV DI,LISTS;將變量LISTS的內容傳送至DI,DI=1234HLEA DX,LISTS;將變量LISTS的偏移地址傳送至DX,DX=2000HLEAAX,[3000H];將3000H單元的偏移地址傳送至AX,AX=3000HLEAESI,LISTS;將變量LISTS的32位偏移地址傳送至ESI,
ESI=00002000HLEARDX,LISTS;將變量LISTS的64位有效地址傳送至RDXLEAEDX,[RAX];將[RAX]的64位地址的低32位(即EAX的值)傳送至EDXLEASI,[RAX];將[RAX]的64位地址的低16位(即AX的值)傳送至SI2023/1/163)地址指針傳送指令LFS、LGS和LSS386新增指令指令功能:與上述的LDS功能基本一樣,不同的是將第二個(或第三個)字的內容分別傳送給隱含的段寄存器FS、GS和SS。注意:在16位模式下,偏移地址為16位,上述各指令的目的寄存器用16位的;在32位保護模式下,偏移地址為32位,上述各傳送指令的目的寄存器應該是32位的。但段寄存器總是16位的。2023/1/164.2.4標志位傳送指令(1)標志寄存器讀寫指令LAHF/SAHF指令LAHF用于將標志寄存器的低字節(jié)(含SF、ZF、AF、PF和CF)讀出后傳送到AH寄存器。
不影響標志位指令SAHF與LAHF的操作相反,它把寄存器AH中的內容寫入標志寄存器的低字節(jié),取代某些標志位(SF、ZF、AF、PF和CF)的原來狀態(tài)。指令書寫格式指令功能LAHFSAHFPUSHFPOPFPUSHFDPOPFD將FLAG低字節(jié)裝入AH寄存器將AH內容裝入Flag低字節(jié)將FLAG內容壓入堆棧從堆棧彈出Flag內容將EFLAG內容壓入堆棧(386新增)從堆棧彈出32位到EFLAG(386新增)2023/1/162)標志寄存器入棧出棧指令PUSHF指令的執(zhí)行過程同PUSH指令,只是將標志寄存器FLAG的內容壓入堆棧。POPF則將當前棧頂的一個字傳送給標志寄存器,同時修改SP+2→SP。PUSHFD/POPFD指令是386新增的指令,功能與PUSHF/POPF基本相同,但操作為EFLAG與堆棧之間的傳送。PUSHFQ指令和POPFQ指令是64位指令,用于RFLAGS與堆棧之間的64位傳送,只能用于64位地址方式。2023/1/16(2)字符串輸入指令INS指令形式:INSB:從DX指定的端口輸入一個字節(jié)到ES:DI指定的內存單元中去。INSW:從DX指定的端口輸入一個字到ES:DI指定的內存單元中去。INSD:從DX指定的端口輸入雙字到ES:DI指定的內存單元中去。注意:若方向標志DF=0,則DI中的地址自動+1(輸入字節(jié))或+2(輸入字)或+4(輸入雙字);若方向標志DF=1,則DI中的地址自動-1(輸入字節(jié))或-2(輸入字)或-4(輸入雙字)。在64位方式下目標地址偏移量由EDI或RDI指明,指令功能和用法不變2023/1/16(3)字符串輸出指令OUTSOUTSB:從DS:SI指定的內存單元輸出一個字節(jié)到DX指定的端口中去。OUTSW:從DS:SI指定的內存單元址輸出一個字到DX指定的端口中去。OUTSD:從DS:SI指定的內存單元輸出雙字到DX指定的端口中去。方向標志DF的用法同INS指令2023/1/164.3算術運算類指令加法減法乘法除擴展指令外,指令的執(zhí)行結果都影響狀態(tài)標志位指令名稱指令書寫格式狀態(tài)標志位OFSFZFAFPFCF加法加法帶進位加法加1交換加(486)ADDreg/mem,reg/mem/immADCreg/mem,reg/mem/immINCreg/memXADDreg/mem,regYYYYYYYYYYYYYYYYYYYYYYNY減法減法帶借位減法減1取負比較比較交換(486)8字節(jié)比較交換(奔騰)SUBreg/mem,reg/mem/immSBBreg/mem,reg/mem/immDECreg/memNEGreg/memCMPreg/mem,reg/mem/immCMPXCHGreg/mem,regCMPXCHG8Bmem64YYYYYYYYYYYYYYYYYNYYYYY1YYYYYYYYYYYYNNYNNN除法擴展十進制調整2023/1/16(2)帶進位、借位的加減法指令ADC/SBB指令格式:ADC OPRD1,OPRD2SBB OPRD1,OPRD2指令功能:常用于長度為兩個字或兩個字以上的操作數的運算,加法操作時在最低位加上進位位CF,或減法操作時減去借位位CF。例如:如果有一個64位數據已存放在EAX(高32位)和EBX(低32位)中,現要加上一個常數123456789ABCDEF0H,這時可用下面兩條指令實現:
ADDEBX,9ABCDEF0HADCEAX,12345678H2023/1/16(3)增量和減量指令INC/DEC指令格式:INCMEM/REGDECMEM/REG功能:是單操作數指令,完成對指定的操作數加1/減1(1是隱含的),然后返回此操作數。注意:指令執(zhí)行的結果影響標志位AF、OF、PF、SF和ZF,而不影響進位標志CF。例:INCCX;CX寄存器中的內容加1DECWORDPTR[EAX];把EAX指向的字存儲單元內容減1在64位方式下,大多數INC/DEC指令都是可以使用的。但是單字節(jié)編碼的INC/DEC指令因為與16個REX前綴代碼相同,所以不能使用。2023/1/16(4)求補指令NEG指令格式:NEG REG/MEM功能:用零減去操作數,再把結果送回操作數。該指令執(zhí)行的效果是改變操作數的符號,將正數變成負數或將負數變成正數,但絕對值不變,所以又稱為取負指令。注意:NEG指令影響所有狀態(tài)標志:若操作數不是0,則總是使CF=1,否則置0;若在字節(jié)操作時對-128、或在字操作時對-32768求補、或在32位操作時對-232求補則操作數沒變化,但溢出標志OF=1。例:NEGEBX;對EBX求補,即EBX←0-EBXNEGBYTEPTR[SI];對8位內存操作數求相反數NEGAL;AL←0-ALADDAL,200;以上兩條指令實現AL←(200-AL)的運算NEGRAX;RAX←0-RAXNEGQWORDPTR[EAX];對64位內存操作數求相反數2023/1/16(6)交換加法指令XADD指令格式:XADDREG/MEM,REG功能:首先將兩個操作數的內容交換,然后兩個操作數的值相加,結果送入第一個操作數。(7)比較并交換指令CMPXCHG指令格式:CMPXCHGREG/MEM,REG功能:將目標操作數與AL、AX或EAX的內容進行比較:如果相等則ZF=1,并將源操作數送入目標操作數;否則ZF=0,并將REG/MEM送到相應的累加器。例如:CMPXCHGECX,EDX
若ECX=EAX,則ECX←EDX,且ZF=1;
否則,EAX←ECX,且ZF=0。2023/1/16(8)8字節(jié)比較并交換指令CMPXCHG8B指令格式:CMPXCHG8BMEM64功能:將EDX(高32位):EAX(低32位)的值與內存單元MEM64中的64位數進行比較,若相等,則置ZF=1,并將ECX:EBX的值傳送到MEM64指定的內存地址;否則,置ZF=0,將MEM64的8字節(jié)內容傳送到EDX:EAX。
該指令只影響ZF標志。2023/1/16二.乘除法指令指令名稱指令書寫格式狀態(tài)標志位OFSFZFAFPFCF乘法不帶符號乘法帶符號整數乘法雙操作數乘三操作數乘MULreg/memIMULreg/memIMULreg,mem/immIMULreg,reg/mem,immYYYY****************YYYY除法不帶符號除法帶符號整數除法DIVreg/memIDIVreg/mem************(1)乘法指令MUL/IMUL指令格式:MULREG/MEMIMULREG/MEM功能:分別用于實現無符號數的乘法和有符號數的乘法運算。它們都只有一個源操作數,可以是寄存器或存儲器,而目標操作數隱含規(guī)定在累加器中。2023/1/16(32位乘積)(16位乘積)╳(8位源操作數)ALsrcAX字節(jié)乘法AX(16位源操作數)src╳DXAX字乘法(64位乘積)╳(32位源操作數)EAXsrcEDXEAX32位乘法(128位乘積)╳(64位源操作數)RAXsrcRDXRAX64位乘法當乘積的高半部分(字節(jié)相乘時為AH、字相乘時為DX、雙字相乘時為EDX、64位相乘時為RDX)不為0,則標志CF=OF=1,表示在AH(或DX、EDX、RDX)中存有結果的有效數字;否則CF=OF=02023/1/16(2)除法指令DIV/IDIV指令格式:DIV REG/MEMIDIV REG/MEM功能:分別用于無符號數的除法和帶符號數的除法運算。指令中對操作數的規(guī)定同乘法指令,除法指令執(zhí)行后,所有的狀態(tài)標志都不確定。商余數余數商32位被除數16位被除數AX8位ALAHDXAX16位AXDX余數商64位被除數EDXEAX32位EAXEDX余數商128位被除數RDXRAX64位RAXRDX若商超過存放它的寄存器的容量(分別為8位、16位、32位或64位)則引起0型中斷(即除法出錯中斷),商和余數的值不能確定。2023/1/16(3)有符號多操作數乘法指令指令格式一:
IMULreg16,reg16/mem16/imm16/imm8IMULreg32,reg32/mem32/imm32/imm8IMULreg64,reg64/reg32/mem64/imm32/imm8功能:用第一個操作數乘以第二個操作數,返回的積存放在操作數1指定的寄存器中。指令格式二:
IMULreg16,reg16/mem16,imm16/imm8IMULreg32,reg32/mem32,imm32/imm8IMULreg64,reg64/mem64,imm32/imm8功能:用第二個操作數乘以第三個操作數,返回的積存放在操作數1指定的寄存器中。兩種形式中,對乘積都限制其長度與第一個操作數的要一致(為16位、32位或64位有符號數),如果溢出,則溢出部分丟掉,并置CF=OF=1,否則CF=OF=0,其余標志位無定義。2023/1/16【例3.28】
IMULBX,CX;BX←BX×CXIMULBX,100;BX←BX×100IMULAX,[BX+DI],1342H
;AX←1342H×DS:[BX+DI]IMULAX,BX,30;AX←30×BXIMULEAX,EBX,123456H
;EAX←EAX×EBX×123456HIMULRAX,RBX,12345678H
;RAX←RAX×RBX×12345678H2023/1/16三.符號擴展指令1.基本符號擴展指令CBW/CWDE/CDQE指令格式:CBWCWDECDQE功能:操作數隱含規(guī)定在累加器中。
CBW將AL中的字節(jié)符號數的符號擴展到AX中;
CWDE將AX中的字有符號數的符號擴展到EAX中;
CDQE將EAX中的字有符號數的符號擴展到RAX中,只能在64位方式下使用。擴展規(guī)則如下:①若AL<80H,則AH←0
若AL≥80H,則AH←0FFH②若AX<8000H,則EAX高16位←0
若AX≥8000H,則EAX高16位←0FFFFH③若EAX<80000000H,則RAX高32位←0
若EAX≥80000000H,則RAX高32位←0FFFFFFFFH這3條指令都不影響任何標志。2023/1/162.雙寄存器符號擴展指令CWD/CDQ/CQO指令格式:CWDCDQCQO功能:CWD功能為將AX寄存器的內容符號擴展到DX中;
CDQ指令的功能為將EAX寄存器的內容符號擴展到EDX中;
CQO指令的功能為將RAX寄存器的內容符號擴展到RDX中,只能在64位方式下使用。它們都不影響標志位。一般來說符號擴展指令大都與除法指令相結合,為達到被除數的位數要求而擴展。【例3.29】求0ABCH÷0200H(帶符號數相除)由于除數為字,則必須將原來的被除數進行符號擴展后才能相除。MOV AX,0ABCHCWD ;被除數擴展為DX:AX=00000ABCHMOV BX,0200HIDIV BX ;AX←商0AH,DX←余數E5H2023/1/163.擴展傳送指令MOVSX/MOVZX指令格式:MOVSXREG16/REG32/REG64,REG8/MEM8/REG16/MEM16MOVZXREG16/REG32/REG64,REG8/MEM8/REG16/MEM16源操作數的長度小于目標操作數的長度;若目標操作數是64位寄存器,則該指令只能用在64位方式下。MOVSX用于傳送有符號數,并將符號位擴展到目標操作數的所有位;MOVZX用于傳送無符號數,將0擴展到目標操作數的所有位。常用于作除法時對被除數位數的擴展。
【例3.30】MOVZXEAX,CX;將CX中16位數零擴展為32位送入EAXMOVSXRCX,AL;將AL內容符號擴展為64位送入RCX。2023/1/16四.BCD算術運算指令(1)非壓縮BCD碼加/減法調整指令AAA/AAS指令格式:加法調整指令AAA
減法調整指令AAS功能:若(AL&0FH)>9或標志AF=1,則AL←AL±6AH←AH±1AF←1CF←AFAL←AL&0FH指令名稱指令書寫格式狀態(tài)標志位OFSFZFAFPFCF加法的ASCII碼調整加法的十進制調整減法的ASCII碼調整減法的十進制調整乘法的ASCII碼調整除法的ASCII碼調整AAADAAAASDASAAMAAD***Y***Y*YYY*Y*YYYYYYY*N*Y*YYY1YYY**
0000011000010010(AL&0FH>9)∧00001111(AL與0FH)0000011000000010(62的BCD碼)
00000(27的BCD碼)+00000(35的BCD碼)
0000010100001100(AL&0FH>9)+00000001+00000110(AH+1,AL+6調整)2023/1/16(2)壓縮BCD碼加減法調整指令DAA/DAS指令格式:加法調整指令DAA
減法調整指令DAS功能:若(AL&0FH)>9或AF=1,則AL←AL±6AF←1若AL>9FH或CF=1,則AL←AL±60HCF←1;【例3.31】AL=65H(十進制數65的BCD碼),BH=47H(十進制數47的BCD碼),用下列指令可得到這兩個數和的正確結果。SUB AL,BH;AL←AL–BH(AL的值為1EH)DAS ;將AL的內容調整為18H2023/1/16(3)非壓縮BCD碼乘除法調整指令AAM/AAD指令格式:乘法調整指令AAM
除法調整指令AADAAM緊跟在MUL指令之后,能把在AX中的兩個非壓縮BCD數相乘的結果進行調整,得到正確的非壓縮BCD的乘積(高位在AH中,低位在AL中)。調整操作為:AH←AL/0AH ;AH←AL被0AH除的商AL←AL%0AH ;AL←AL被0AH除的余數AAD指令用來在進行兩個非壓縮BCD數的除法運算之前,先調整AL和AH中的內容,再用二進制除法指令DIV相除。相除以后,以非壓縮BCD數表示的商在AL中,而相應的余數在AH中。調整操作為:AL←AH×0AH+ALAH←02023/1/164.4邏輯運算與移位指令(1)邏輯非指令NOT指令格式:NOT reg/mem功能:將操作數按位取反送回。例:NOTEAX;若指令執(zhí)行前(EAX)=66668888H,
則指令執(zhí)行后(EAX)=99997777H。一.邏輯運算指令指令名稱指令書寫格式狀態(tài)標志位OFSFZFAFPFCF‘非’NOT目標NNNNNN‘與’AND目標,源0YY*Y0‘或’OR目標,源0YY*Y0‘異或’XOR目標,源0YY*Y0‘測試’TEST目標,源0YY*Y02023/1/16(2)邏輯與/或/異或指令指令格式:AND/OR/XOR reg/mem,reg/imm/memreg功能:執(zhí)行按位邏輯“與”、“或”和“異或”操作,兩個操作數寬度必須相等,執(zhí)行結果存入第一個操作數中。AND實現邏輯“與”操作:例:ANDAL,0FH;AL的高4位被屏蔽,低4位被析取OR實現邏輯“或”操作:例:ORBX,0003H;BX寄存器的第0位和第1位置1XOR實現邏輯“異或”操作:例:XOREBX,00000001H;改變BX寄存器第0位的狀態(tài)2023/1/16(3)測試指令TEST指令格式:TEST reg/mem,reg/mem/imm指令功能:與AND指令相同,但操作結果不送回目標操作數,即兩個操作數不變,只影響標志位。例:若要檢測AL中的最低位是否為1,為1則轉移,可使用以下指令:
TESTAL,01H JNZTHAT;ZF=0,則AL寄存器的第0位為1,轉移到THAT …THAT:… …2023/1/16二.移位和循環(huán)移位指令類別指令名稱指令書寫格式狀態(tài)標志位OFSFZFAFPFCF移位邏輯左移SHL目標,計數值YYY*YY算術左移SAL目標,計數值YYY*YY邏輯右移SHR目標,計數值YYY*YY算術右移SAR目標,計數值YYY*YY多位左移SHLDOPRD1,OPRD2,OPRD3YYY*YY多位右移SHRDOPRD1,OPRD2,OPRD3YYY*YY循環(huán)移位循環(huán)左移ROL目標,計數值YNN*NY循環(huán)右移ROR目標,計數值YNN*NY帶進位循環(huán)左移RCL目標,計數值YNN*NY帶進位循環(huán)右移RCR目標,計數值YNN*NY2023/1/16(1)移位指令SHL/SAL/SHR/SAR具體指令為:SHL/SAL/SHR/SAR reg/mem,1/CL/imm8指令影響PF、SF、ZF、CF以及OF五個標志位,對AF的影響不確定。
CF:總是等于目標操作數最后移出的那一位。
OF:---如果移位計數值為1,且執(zhí)行結果使目標操作數的符號位(最高位)
發(fā)生變化,則OF=1,否則OF=0;
---若移位計數值不為1,則OF狀態(tài)不定。SHLCF0SALCF0ROLCFRCLCFSHRCF0SARCFRORCFRCRCF2023/1/16【例3.37】若AL中存有8位有符號數,現需要將其乘以16(2的4次方),結果存入AX中,則可用以下指令完成:CBW ;將字節(jié)AL擴展到字AXSAL AX,4(或SHLAX,4) ;AX←AX×16【例3.38】下面的程序段可用來執(zhí)行(RAX)*5/2的運算(假設運算過程中沒有超出64位)。MOVRDX,RAX;RAX暫存于RDXSALRAX,2;RAX*4ADDRAX,RDX;5倍RAXSARRAX,1;RAX除以22023/1/16(2)循環(huán)移位指令ROL/ROR/RCL/RCR具體指令為:
ROL/ROR/RCL/RCRreg/mem,1/CL/imm8
若有一個8字節(jié)數,它們或是存放在兩個寄存器中(如EAX和EDX中),或是存放在連續(xù)的內存單元中,則可用下面的指令來實現這個8字節(jié)數整個左移一位。
SALEAX,1或:SALFIRST_DWORD,1RCLEDX,1RCLSECOND_DWORD,12023/1/16類別指令名稱指令書寫格式狀態(tài)標志位OFSFZFAFPFCF基本串操作指令字節(jié)/字/雙字串傳送MOVS目標串,源串MOVSB/MOVSW/MOWSD/MOWSQNNNNNNNNNNNN字節(jié)/字/雙字串比較CMPS目標串,源串CMPSB/CMPSW/CMPSD/CMPSQYYYYYYYYYYYY字節(jié)/字/雙字串搜索SCAS目標串,源串SCASB/SCASW/SCASD/SCASQYYYYYYYYYYYY讀字節(jié)/字/雙字串LODS目標串,源串LODSB/LODSW/LODSD/LODSQNNNNNNNNNNNN寫字節(jié)/字/雙字串STOS目標串,源串STOSB/STOSW/STOSD/STOSQNNNNNNNNNNNN重復前綴無條件重復REPNNNNNN當相等/為零時重復REPE/RPZNNNNNN當不等/不為零時重復REPNE/PEPNZNNNNNN4.5串操作類指令2023/1/161)約定以DS:SI尋址源串,以ES:DI尋址目標串,所以指令中不必顯式指明操作數。其中源串的段寄存器DS可通過加段超越前綴而改變,但目標串的段寄存器ES不能超越。在32位處理器中,也可以用ESI和EDI做為源和目的串的變址寄存器。2)用方向標志規(guī)定串處理方向。若DF=0(用指令CLD設置),從低地址向高地址方向處理;若DF=1(用指令STD設置),則處理方向相反。3)源、目標兩個指針SI和DI在每次操作后都將根據方向標志DF的值自動增量(DF=0時)或減量(DF=1時),以指向串中下一項。增量/減量的大小由操作串的長度決定:字節(jié)串時SI和DI加/減1,字串時加/減2,雙字串時加/減4,4字串時加/減8
。4)加重復前綴時,必須用CX作為重復次數計數器,其中存有被處理數據串的字節(jié)個數或字個數。指令每執(zhí)行一次,CX值減1,直至減為0結束。在32/64位處理器中,也可以用ECX/RCX做為串重復次數寄存器。串操作指令共同點2023/1/16一.重復前綴REP/REPE/REPNE/REPZ/REPNZ重復前綴不能單獨使用,只能加在串操作指令之前,用來控制其后的基本串操作指令是否重復。1)在MOVS、LODS、STOS指令前加上前綴指令REP后,就按下列步驟不斷地重復:①若CX=0,則退出REP操作;否則:②CX←CX-1③執(zhí)行REP后面的數據串指令④重復①~③2)將REPE/REPZ加在CMPS或SCAS指令之前時,上述重復執(zhí)行步驟①變?yōu)椋孩偃鬋X=0或ZF=0,則停止重復過程。3)將REPNE/REPNZ加在CMPS或SCAS指令之前時,上述重復執(zhí)行步驟①變?yōu)椋孩偃鬋X=0或ZF=1,停止重復過程。2023/1/16二.基本串操作指令(1)串傳送指令MOVS/MOVSB/MOVSW/MOVSD/MOVSQ指令格式:MOVS OPRD1,OPRD2MOVSB;字節(jié)串傳送MOVSW;字串傳送MOVSD;雙字串傳送MOVSQ;4字串傳送功能:把DS:SI指定的源串中的一個字節(jié)或字,傳送至由ES:DI指定的目標串。且根據方向標志DF自動地修改SI、DI,以指向串中的下一個元素。2023/1/16例:將數據段內起始地址在SOURCE(段內偏移地址)的一數據塊傳送到附加段地址在DEST的存儲單元中去,可用下面的程序段來實現(假設數據塊長度=100字節(jié)):LEA SI,SOURCELEA DI,DESTMOV CX,50 ;設置循環(huán)操作次數100/2CLD ;設置方向標志DF=0GO_ON: MOVSWDEC CXJNZ GO_ON若采用重復前綴,則上述程序簡化為:LEA SI,SOURCELEA DI,DESTMOV CX,50 ;設置循環(huán)操作次數CLD ;設置方向標志DF=0REP MOVSW2023/1/16(2)串比較指令CMPS/CMPSB/CMPSW/CMPSD/CMPSQ指令格式:CMPS
OPRD1,OPRD2
CMPSB
;字節(jié)串比較
CMPSW
;字串比較
CMPSD
;雙字串比較
CMPSQ
;4字串比較功能:將DS:SI指定的源串中的元素減去由ES:DI指定的目標串中的相應元素,但兩個存儲單元中的內容不變,而是用標志位的變化表示比較結果,同時根據方向標志DF自動修改源和目標串指針SI、DI。若CMPS指令前加上前綴REPE/REPZ,則表示:當串未結尾(CX≠0)且串相等(ZF=1)時繼續(xù)比較;如果CMPS用REPNE/REPNZ作前綴,則表示:當串未結尾(CX≠0)且串不相等(ZF=0)時繼續(xù)比較。2023/1/16例:比較兩個字符串是否有相同的元素,它們的首地址和目標地址分別為SRC和DST,字符串的長度為N個字節(jié)。
CLD
;DF=0,增量方向
LEASI,SRC;字符串首地址送DS:SILEADI,ES:DST;目標地址送ES:DIMOVCX,N;字符串長度
REPNECMPSB;重復比較字符串
JNZNOT_FOUND
;無相同的元素,轉NOT_FOUND,否則繼續(xù)執(zhí)行下條指令
……
NOT_FOUND:……若兩個字符串沒有相同的元素,則串比較指令一直重復執(zhí)行,直至(CX)=0為止,并轉入下一條條件轉移指令JNZ,判斷比較結果是否為0。顯然,由于未找到相同的元素,因此比較結果非0,轉NOT_FOUND執(zhí)行。
2023/1/16(3)串搜索指令SCAS/SCASB/SCASW/SCASD/SCASQ指令格式:SCAS
OPRD
SCASB
;搜索字節(jié)串
SCASW;搜索字串
SCASD ;搜索雙字串
SCASQ ;搜索4字串功能:將累加器(AL或AX)中的內容與ES:DI)指定的目標串元素(字節(jié)或字或雙字或4字)進行比較(減法操作),用標志位反映比較的結果,而不改變累加器和目標串的內容,達到字符串搜索的目的,同時自動修改指針DI。在SCAS指令前加有REPE/REPZ前綴,則表示:當串未結尾(CX≠0)且串元素=關鍵值(ZF=1)時繼續(xù)搜索。
--用來搜索與給定關鍵值不同的內容。在SCAS指令前加有REPNE/REPNZ前綴,則表示:當串未結尾(CX≠0)且串元素≠關鍵值(ZF=0)時繼續(xù)搜索,直到CX=0或ZF=1才執(zhí)行下一條指令。
--可以用來在一個串中查出某一指定元素。2023/1/16例:在首地址為ES:DST的字符串中檢查是否有字符'M',字符串的長度為N個字節(jié)。
CLD
;DF=0,增量方向
LEADI,ES:DST
;目標地址送ES:DIMOVCX,N
;字符串長度
MOVAL,‘M’
;搜索字符送ALREPNESCASB
;重復搜索字符串是否有字符'M'
若字符串中沒有字符‘M’,則串掃描指令一直重復執(zhí)行,直至CX=0為止,并轉入下一條指令繼續(xù)執(zhí)行。否則,將提前轉入下一條指令繼續(xù)執(zhí)行。2023/1/16(4)串元素存取指令指令格式:STOS/LODS OPRD
STOSB/LODSB
;存/取字節(jié)串
STOSW/LODSW
;存/取字串
STOSD/LODSD
;存/取雙字串
STOSQ/LODSQ
;存/取4字串STOS將累加器(AL或AX)的內容存入由ES:DI指定的目標串中去,同時自動修改DI。指令前可加重復前綴REP,以給一個內存塊賦同一個值。LODS將DS:SI指定的源串中的元素,傳送到AL(字節(jié)操作)或AX(字操作)寄存器中,同時自動修改SI。2023/1/16例:將首地址為DS:SRC的32位數據串中值為87654321H的元素送到首地址為ES:DST的內存區(qū)中。字符串長度為1000H字節(jié)。
CLD
;DF=0,增量方向
LEAESI,SRC
;字符串首地址送DS:SILEAEDI,ES:DST
;目標地址送ES:DIMOVECX,400H
;字符串長度1000H/4=400HCONTINUE:LODSD
;取字符串的一個元素
CMPEAX,87654321H;字符串元素為87654321H嗎?JNENEXT
;不是,繼續(xù)取下一個元素
STOSD
;是,存入首地址為ES:DST的內存區(qū)中NEXT:DECECXJNZCONTINUE利用DEC和JNZ指令控制串操作指令的重復執(zhí)行次數。當(ECX)≠0時,程序重復循環(huán),直至(ECX)=0為止。2023/1/164.6控制轉移類指令一.無條件轉移指令JMP指令格式:JMP 目標標號JMP指令有以下5種形式:(1)段內直接短轉移:JMP
SHORTlable
功能:無條件地轉移到lable所指定的目標地址。短(SHORT)轉移時,目標地址與JMP指令的下一條指令地址之差在-128~127字節(jié)之間,即跳轉地址的偏移范圍為8位帶符號二進制數范圍,屬于相對轉移。(2)段內直接近轉移:JMP
NEARPTRlable
功能:無條件轉移到目標地址lable。跳轉地址的偏移范圍為16位帶符號二進制數的范圍,即±32K,屬于相對轉移。(3)段內間接轉移:JMPreg或JMP mem
功能:無條件轉移到由寄存器的內容指定的目標地址,或由寄存器間接尋址、基址變址、相對基址變址提供的存儲單元內容所指定的目標地址,是一種絕對轉移指令。2023/1/16例:MOV
BX,1000H
JMP
BX ;程序將轉向1000H,即IP←1000H
JMP
WORDPTR[BX+20H]設DS=2000H,[21020H]=34H,[21021H]=12H,則第二個JMP將程序轉向1234H,即IP=1234H。(4)段間直接轉移:JMP FARPTRlable功能:無條件轉移到指定段內的目標地址lable,是絕對轉移指令。例:CODE1 SEGMENT CODE2
SEGMENT
…
…
JMP FARPTRDEST DEST:… …
…
CODE1ENDS CODE2 ENDS目標地址也可直接用數值表達式給出,這時可省略FAR屬性說明。
JMPFARPTR2000H:0100H 程序將轉向段地址為2000H,偏移地址為0100H的單元2023/1/16(5)段間間接轉移:JMP mem功能:程序將轉向由mem指定的雙字指針中第一個字單元的內容作為IP,第二個字單元的內容作為CS的目標地址。例:MOV SI,0100H
JMP DWORDPTR[SI]把DS:[SI]即DS:0100H和DS:0101H兩單元的字送IP,而把DS:0102H和DS:0103H兩單元的字送CS。程序轉入由新的CS和新的IP決定的目標地址。在32位保護模式下,段內轉移的目標地址為32位偏移地址,段間轉移的目標地址為48位虛擬地址(16位段選擇符:32偏移地址)。例:JMPEBX;段內轉移,EIP=EBXJMPFWORDPTR[EBX];段間轉移,目標地址為[EBX]指向的48位虛擬地址,
;CS=其中的高16位,EIP=其中的低32位2023/1/16在64位模式下,指令指針為RIP。JMP指令的執(zhí)行分為相對轉移和絕對轉移兩種情況:若為相對轉移,則用RIP寄存器與機器碼中的位移量字段相加的和修改RIP值,此時位移量字段不能超過32位,并將其符號擴展為64位再相加;若為絕對轉移,則把機器碼中指出的寄存器或內存單元的值直接填入RIP(若不足64位將進行0擴展),實現64位地址空間的轉移?!纠縅MP30000H
;若原來RIP=20000H,則將RIP加10000H,實現相對轉移
JMPR15;程序將轉向R15指向的地址,即RIP←R15,實現絕對轉移2023/1/16二.條件轉移類指令(1)根據單個標志位的條件轉移指令
JCTAB1 ;當(AX-BX)有借位時,轉至TAB1。
CMPCX,DXJNETAB2;當CX≠DX(即CX-DX≠0)時,轉至TAB2。指令名稱說明助記符測試條件等于/結果為零轉移相等/等于零JE/JZ目標標號ZF=1不等于/結果不為零轉移不相等/不等于零JNE/JNZ目標標號ZF=0有進位/有借位轉移有進位/借位JC目標標號CF=1無進位/無借位轉移無進位/借位JNC目標標號CF=0溢出轉移有溢出JO目標標號OF=1不溢出轉移無溢出JNO目標標號OF=1奇偶性為1/為偶轉移有偶數個“1”JP/JPE目標標號PF=1奇偶性為0/為奇轉移有奇數個“1”JNP/JPO目標標號PF=0符號位為1轉移是負數JS目標標號SF=1符號位為0轉移是正數JNS目標標號SF=02023/1/16(2)用于無符號數比較的條件轉移指令表3.9中的11~14條指令,檢測無符號數比較結果的特征標志CF和ZF。例:比較無符號數FEH和01H的大小,執(zhí)行下面的指令后,將轉移到ABOVE處繼續(xù)執(zhí)行指令。
MOVAL,0FEHCMPAL,01HJAABOVE……ABOVE:……指令名稱說明助記符測試條件高于/不低于也不等于轉移無符號數A>BJA/JNBE目標標號CF=0且ZF=0高于或等于/不低于轉移無符號數A≥BJAE/JNB目標標號CF=0低于/不高于也不等于轉移無符號數A<BJB/JNAE目標標號CF=1低于或等于/不高于轉移無符號數A≤BJBE/JNA目標標號CF=1或ZF=12023/1/16(3)用于有符號數比較的條件轉移指令表3.9中的最后四條指令檢測的是SF、OF以及ZF標志,表示兩個有符號數間的大小關系。例:比較有符號數FEH和01H的大小,下面的指令,將不轉移到greater,而是繼續(xù)執(zhí)行JG下面的一條指令,因為有符號數0FEH<01H。
MOVAL,0FEHCMPAL,01HJGGREATER指令名稱說明助記符測試條件大于/不小于也不等于轉移有符號數A>BJG/JNLE目標標號SF⊕OF=0且ZF=0大于或等于/不小于轉移有符號數A≥BJGE/JNL目標標號SF⊕OF=0或ZF=1小于/在大于也不等于轉移有符號數A<BJL/JNGE目標標號SF⊕OF=1且ZF=0小于或等于/不大于轉移有符號數A≤BJLE/JNG目標標號SF⊕OF=1或ZF=12023/1/16三.調用與返回指令1.調用指令CALL指令格式:CALL OPRD
用于調用子程序(或過程)OPRD,它和JMP指令相似。⑴段內直接調用操作:PUSHIP;IP入棧
(IP)←(IP)+16位位移量;轉向子程序入口2023/1/16⑵段內間接調用(CALLNEARPTRDST)操作:PUSHIP;IP入棧
(IP)←(EA);轉向子程序入口
----IP的值不是CALL指令的下一條指令地址加上16位位移量,而是直接將DST的有效地址送入IP,這是一種絕對調用指令。例:
CALLBX;EA在BX中
CALLWORDPTR[BX];EA在字存儲單元中2023/1/16⑶段間直接調用(CALLFARPTRDST)操作:PUSHCS;CS入棧
PUSHIP;IP入棧
(IP)←偏移地址;IP由指令中的偏移地址取代
(CS)←段地址;CS由指令中的段地址取代其一:調用時不僅要保護偏移地址,而且要保護段地址,先CS壓棧,然后IP壓棧;其二:CS和IP的值不是用CALL指令的下一條指令地址加上位移量取代,而是直接將DST的段地址和偏移地址送入CS:IP,是一種絕對調用指令。例:
CALL1000H:0100HCALLFARPTRSUB_PROC2023/1/16⑷段間間接調用(CALLFARPTRDST)操作:PUSHCS;CS入棧
PUSHIP;IP入棧
(IP)←(EA);IP由指令中的偏移地址取代
(CS)←(EA+2);CS由指令中的段地址取代
是絕對調用指令,根據尋址方式求出EA后,把指定存儲單元的字內容送到IP,下一個字的內容送到CS。2023/1/162.返回指令RET指令格式:RET
或RET imm16用以返回到調用這個子程序的斷點處,作為子程序或過程的最后一條指令,。若是段內返回,則把棧頂的一個字彈出至IP,恢復調用時斷點處的偏移地址;若為段間返回,則除了彈出IP外,還要從當前棧頂繼續(xù)彈出一個字到CS,恢復斷點處的段地址。2023/1/16(2)RET imm16指令帶立即數的返回指令,中的16位立即數稱為彈出值,RET指令在完成返回操作后,還須作SP←SP+imm16,即刪除棧中imm16個字節(jié)的內容。例:下列程序段表示由于在RET指令中規(guī)定了彈出值,使控制從子程序返回后棧頂位置恢復到正常狀態(tài)。;主程序MOVAX,N1 ;子程序APUSHAX PROG_APROCNEARMOVAX,N2 …PUSHAX RET 4CALLPROG_A PROC_AENDPMOVSUM,AX2023/1/16在32位模式下對于CALL指令,段內調用的目標地址為32位偏移地址,段間調用的目標地址為48位虛擬地址。若是段內調用,則將EIP的值進棧;若是段間調用,則先將CS的值零擴展為雙字后再進棧,然后將EIP的值進棧,總共進棧8個字節(jié)。對于RET指令段內返回時彈出棧頂的4個字節(jié)到EIP;段間返回時先彈出棧頂的4個字節(jié)到EIP,然后再彈出4個字節(jié),其中的低16位進入到CS。2023/1/16在64位模式下CALL/RET指令對RIP寄存器執(zhí)行入棧和彈出操作。對于NEAR類型的CALL指令有兩種實現方式:一種是可以通過32位位移量實現相對轉移,完成調用功能;另一種方法是通過指令給出的64位存儲器或寄存器內容修改RIP,實現絕對轉移而完成調用功能。對于FAR類型的CALL指令,只能通過內存單元內容間接訪問相應的段描述符,若描述符中的選擇子指向了調用門,就從調用門中獲得64位目標地址,否則把當前指令指出的內存單元作為64位目標地址,完成調用功能。絕對轉移2023/1/16四.循環(huán)控制指令指令格式:LOOP
目標地址
LOOPE/LOOPZ
目標地址
LOOPNE/LOOPNZ
目標地址
JCXZ
目標地址除JCXZ指令外,其余指令都是先使CX內容減1,然后依據CX中的值是否為0來決定是否終止循環(huán)。注意:LOOPZ/LOOPE指令:使CX-1→CX,若CX≠0且ZF=1,則循環(huán)轉移至目標標號;否則(CX=0或ZF=0),順序執(zhí)行LOOPZ/LOOPE后面的指令。LOOPNZ/LOOPNE同LOOPZ/LOOPE指令類似,只不過轉移條件是CX≠0且ZF=0。JCXZ指令不影響CX的內容,此指令僅在CX=0時,控制轉移到目標標號,否則順序執(zhí)行JCXZ的下一條指令。
2023/1/16例:檢查當前數據段所在的64K字節(jié)內存是否能夠正確地進行讀寫操作??梢韵认蛎總€字節(jié)寫入數據10101010B,然后讀出來進行比較。若正確則轉至目標標號OK的程序段,否則進入出錯處理程序段ERROR。程序如下:MOVCX,0000HMOVBX,0000HMOVAL,10101010BAGAIN:MOVBYTEPTR[BX],ALINC BXCMPBYTEPRT[BX-1],ALLOOPZALAINJCXZOKERROR: … ;出錯處理
…OK: … ;讀寫正確當程序執(zhí)行JCXZ指令時,可能有兩種情況:
①CX=0,這表示所有單元的讀寫都正確;
②CX≠0,但ZF=0,表示檢查到某一單元時,寫入與讀出不一致,即出錯。于是JCXZ指令根據CX寄存器內容是否為0(為0表示正確,不為0表示出錯)使程序發(fā)生分支,進入不同的程序段。2023/1/16五.中斷指令(1)中斷指令INT/INTO指令格式:INTimm8INTO功能:
INTimm8:用于產生一個由8位立即數指定中斷號的內部中斷。該指令首先將標志寄存器FLAG和斷點地址(CS和IP)進棧,并將標志位TF和IF清零,然后轉向指定中斷號的中斷服務程序。系統中最多可用256條這樣的中斷指令
INTO:為溢出中斷指令,是內部中斷指令INT的特例,中斷號隱含為4。它只有當某運算結果使OF置1時才產生中斷。指令名稱指令助記符中斷INT中斷類型溢出時中斷INTO中斷返回IRET2023/1/16(2)中斷返回指令IRET指令格式:IRET----所有的中斷過程,最后一條指令必須是IRET,用以退出中斷過程,返回到中斷時的斷點處。操作:從堆棧中彈出原進棧保護的IP、CS和標志寄存器FLAG值,繼續(xù)被中斷程序的執(zhí)行。注意:在32位保護模式下,對于INT指令,依次進棧的是EFLAG、CS、EIP,其中CS零擴展為雙字后進棧,總共12個字節(jié)。IRET指令彈出棧頂12個字節(jié),按相反的順序依次恢復EIP、CS、EFLAG。在32位模式和64位模式下,還分別可以使用IRETD、IRETQ完成中斷返回,功能與IRET指令類似。
2023/1/164.7處理器控制類指令一.標志位操作指令(1)CLC/STC/CMCCLC和STC指令使進位標志CF置為
0或1,CMC使標志CF取反。(2)CLD/STD
將方向標志DF置為0或1,以控制串操作指令執(zhí)行時SI和DI是增量或減量。(3)CLI/STI
將中斷標志IF置為0或1,以控制CPU是否響應可屏蔽中斷INTR引線上出現的外部中斷請求。CLI禁止CPU響應,而STI指令允許CPU響應。指令名稱助記符進位標志置1STC進位標志復位CLC進位標志取反CMC方向標志置1STD方向標志復位CLD中斷標志置1STI中斷標志復位CLI2023/1/16二.處理器協調類指令作用是實現CPU與外部事件的同步。(1)處理器暫停指令HLT
作用:使程序停止執(zhí)行,處理器進入暫停狀態(tài)。它不影響任何標志。只有當以下三種情況之一發(fā)生,才能使CPU結束暫停狀態(tài):在CPU的RESET線上有復位信號;在CPU的NMI線上有請求;在中斷允許情況下(即標志IF=1),CPU的INTR線上有請求。所以,HLT指令常在程序中用于等待中斷。當因中斷使CPU脫離暫停而去執(zhí)行中斷服務程序時,中斷保護的斷點CS:IP值應指向HLT指令的下一條指令。指令名稱助記符停機HLT等待WAIT封鎖總線LOCK空操作NOP2023/1/16(2)處理器等待指令WAIT功能:主要用來使C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年配氣機構:進排氣門項目建議書
- 醫(yī)院職工食堂建設合同范本
- 勞動合同法附合同范本
- 藥店銷售協議合同范本
- 個人 融資傭金合同范本
- 博物館合同范例
- 勞務合同范本小時工
- 土地土地租賃合同范本
- 租憑吊車合同范本
- 冷凝機組采購合同范本
- 2025年春新外研版(三起)英語三年級下冊課件 Unit2第3課時Fuelup
- 2025年徐州地鐵集團有限公司招聘筆試參考題庫含答案解析
- 6月26國際禁毒日防范青少年藥物濫用禁毒宣傳課件
- 老舊小區(qū)基礎設施環(huán)境改造工程施工質量因素的分析及控制方法
- 伊斯蘭教完整版本
- 華師版初中九年級數學HS下冊教案(全一冊)
- 2024年10月自考00107現代管理學試題及答案
- 2024解析:第十八章電功率-講核心(解析版)
- 2024年新疆區(qū)公務員錄用考試《行測》真題及答案解析
- 嚴重創(chuàng)傷患者緊急救治血液保障模式與輸血策略中國專家共識(2024版)
- 【川教版】《生命 生態(tài) 安全》五下全冊課件
評論
0/150
提交評論