




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息与通信工程学院微机原理软件实验报告班级: 2011211105 姓名: 潘文斌 学号: 2011210132 日 期 : 2013年11月 实验二 分支、循环程序设计一、实验目的1. 开始独立进行汇编语言程序设计;2. 掌握基本分支,循环程序设计;3. 掌握最简单的 dos 功能调用。二、实验内容1. 安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过 9。2. 编写一个程序统计数据区中正数,负数和零的个数。3. 将统计结果在屏幕上显示。4. (扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。三、预习思考1. 十进制数 0 9 所对应的 ascii 码是什么? 如何将十进制数 0 9 在屏幕上显示出来?答:09分别对应ascii码的30h39h。将十进制数09显示在屏幕上,要用二进制数09分别加上30h,调用dos 02h功能显示单个字符。2. 如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:直接用cmp命令和0比较,然后用jge等命令进行判断。还可以与0作比较,然后与10000000想与,判断正负。四、实验过程1、流程图开始定义各段并初始化读取当前指针指向的数,指针+10该数和0比较0负数个数+1正数个数+1=00的个数+1统计结果显示结果结束2、源代码datas segment block dw 1,5,15,-26,0,43,-55,24,0,4 dw-5,-22,21,0,-45,-2,66,-67,0,0 count equ $-block ; 数组长度 plus db ? zero db ? minus db ? string1 dbplus_num:,$ string2 dbzero_num:,$ string3 dbminus_num:,$datas endsstacks segment db 100 dup(?)stacks endscodes segment assume cs:codes,ds:datas,ss:stacksstart: push ds xor ax,ax push ax mov ax,datas mov ds,ax mov cx,count shr cx,1 ; block是字类型,所以cx需要除以2才是数字的实际个数 mov al,00h; al作为正数的计数器,并初始化 xor dx,dx ; dh作为负数的计数器,dl作为零的计数器,并初始化 lea bx,blockagain: cmp word ptr bx,0; 寄存器间接寻址,并与0做比较 jge plu inc dh jmp nextplu: jz zer inc al jmp nextzer: inc dlnext: inc bx inc bx loop again; 调整bx继续进行判断分类cx次 mov plus,al mov zero,dl mov minus,dh call display1 call display2 call display3 ; 此处输入代码段代码 mov ah,4ch int 21hdisplay1 proc near push dx push ax mov dx,seg string1 mov ds,dx; 因为立即数无法直接赋值给段寄存器,此处用dx做间接量使ds获得段地址 mov dx,offset string1 mov ah,09h; 调用dos09号功能实现字符串的显示 int 21h mov dl,plus add dl,30h; 转换为ascii码 mov ah,02h; 调用dos02号功能实现单个字符的显示 int 21h mov dl,0ah; 换行显示 int 21h pop ax pop dx retdisplay1 endpdisplay2 proc near push dx push ax mov dx,seg string2 mov ds,dx;因为立即数无法直接赋值给段寄存器,此处用dx做间接量使ds获得段地址 mov dx,offset string2 mov ah,09h;调用dos09号功能实现字符串的显示 int 21h mov dl,zero add dl,30h;转换为ascii码 mov ah,02h;调用dos02号功能实现单个字符的显示 int 21h mov dl,0ah int 21h pop ax pop dx retdisplay2 endpdisplay3 proc near push dx push ax mov dx,seg string3 mov ds,dx;因为立即数无法直接赋值给段寄存器,此处用dx做间接量使ds获得段地址 mov dx,offset string3 mov ah,09h;调用dos09号功能实现字符串的显示 int 21h mov dl,minus add dl,30h;转换为ascii码 mov ah,02h;调用dos02号功能实现单个字符的显示 int 21h pop ax pop dx retdisplay3 endpcodes ends end start3、实验分析数据区待统计的数据为:1,5,15,-26,0,43,-55,24,0,4, -5,-22,21,0,-45,-2,66,-67,0,0实验结果如下:有8个正数,7个负数,5个0五、实验总结这是我第一次独立进行汇编语言程序设计,通过上课和这次实践,我初步掌握了基本分支,循环程序的设计,数字的显示相关功能,即掌握了最简单的 dos 功能调用。因为报告是在完成所有实验内容后才统一写的,所以当我完成所有报告再回过头看第一个实验的代码时发现还有很多可以改进的地方,比如我使用了三个关于显示的函数,可以像我在实验五中那样进行宏定义,简化代码量。实验三 代码转换程序设计一、实验目的1. 掌握几种最基本的代码转换方法;2. 运用子程序进行程序设计。二、实验内容1. 从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。2. 两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。3. 对输入要有检错措施,以防止非法字符输入,并有适当的提示。4. 将整个程序分解为若干模块,分别用子程序实现。在报告中要给出模块层次图。三、预习思考1. 如何将输入的两个字符(09)变为十进制或二进制数?答:输入的字符09是ascii码表示的,对应于30h39h,通过减去30h,可以转换为相应的十进制数。2. 如何将选出的最小值(二进制或十进制)变为 ascii 码再进行显示?答:如果已经是二进制,因为输入的数字字符被自动编译为ascii所以不需要转换;如果是十进制,则对数字加上30h即可转换为对应的ascii码即二进制。 3. 你觉得采用二进制运算还是十进制运算更适合于这个实验?答:采用二进制更适合这个实验,因为这个实验的输入和输出都是ascii码的形式,所以在存储单元中适合用ascii即二进制进行存储,比较时, 提取ascii转换为十进制并按高低位保存为一个字节,对字节直接进行无符号数比较即可(改程序要求中只有正数)四、实验过程1、流程图开始统计输入总个数欢迎及介绍si为指针提取数据设置当前最小值为第一个数键盘输入存储输入的数据错误输入检查正确判断是否比较到最后一个数si+2是否第一位输入为回车键新提取的数据较小当前最小值较小存储最小数输出最小数调用子程序找最小数改变当前最小值直接比较大小将提取的数据转化为十进制保存在ax,高位为十位,低位是个位2、源代码datas segmentorg 100h input db 100 dup(?);最多输入50个二位十进制数 count equ $-input min db 2 dup(?) welcome db please input several double_digit:,$;(00 to 99,the decade get number first),0ah,key in enter to finish:,$ error db 0ah,input error,please input again,0ah,$ outcome db the min is:,$ datas endsstacks segment db 100 dup(?)stacks endscodes segment assume cs:codes,ds:datas,ss:stacksstart: xor ax,ax push ds push ax mov ax,datas mov ds,ax xor ax,ax mov si,offset input inc si mov cx,count shr cx,1 ; 最多输入50个两位数restart2: ; 个位数输入有误时,整个数将要重新输入 dec sirestart: mov bl,00h call welc call get cmp bl,01h jz restart cmp al,0dh jz restart ; 第一个回车键也算错误输入 mov si,al; 对于一个两位数,十位存在低地址 inc siagain: call get2 ; 完成一次正确的输入用,进行分隔 cmp bl,01h jz restart2 mov si,al; 个位存在高地址 inc si call get cmp bl,01h jz restart cmp al,0dh ; 判断是不是enter键 je get_count mov si,al inc si loop again get_count: ; 实际输入个数,为求最小值做准备 mov cx,si;把si保存的偏移地址送入cx,是16位 mov si,offset input sub cx,si inc cx shr cx,1 dec cx call compare call show_min welc proc near push dx push ds push ax mov dx,seg welcome mov ds,dx mov dx,offset welcome mov ah,09h int 21h pop ax pop ds pop dx retwelc endpget proc near push si mov ah,01h int 21h cmp al,0dh jz finishcmp1: ; 输入字符是否大于等于0 cmp al,30h jae cmp2 push dx push ds push ax mov dx,seg error mov ds,dx mov dx,offset error mov ah,09h int 21h pop ax pop ds pop dx mov bl,01h jmp finishcmp2: ; 输入字符是否小于等于9 cmp al,39h jbe finish; push dx push ds push ax mov dx,seg error mov ds,dx mov dx,offset error mov ah,09h int 21h pop ax pop ds pop dx mov bl,01hfinish: pop si retget endpget2 proc near push si mov ah,01h int 21hcmp21: cmp al,30h jae cmp22 push dx push ds push ax mov dx,seg error mov ds,dx mov dx,offset error mov ah,09h int 21h pop ax pop ds pop dx mov bl,01h jmp finish2cmp22: cmp al,39h jbe finish2; push dx push ds push ax mov dx,seg error mov ds,dx mov dx,offset error mov ah,09h int 21h pop ax pop ds pop dx mov bl,01hfinish2: push dx push ax mov dl, ; 完成一次输入后用,进行分隔 mov ah,02h int 21h pop ax pop dx pop si retget2 endpcompare proc near push ax push bx push si push di mov di,offset min mov si,offset input mov ah,si ; 将两位数的十位放到ah sub ah,0 ; 转化为十进制 mov al,si+1; 将个位放到al sub al,0 ; 转化为十进制 inc si inc sicmpp: mov bh,si mov bl,si+1 sub bh,0 sub bl,0 cmp ax,bx jbe re xchg ax,bxre: inc si inc si loop cmpp mov di,ah ; 把最小值的十位存储在低地址 mov di+1,al; 个位存储在高地址,方便显示 pop di pop si pop bx pop ax ret compare endpshow_min proc near push dx push ds push ax push di mov dx,seg outcome mov ds,dx mov dx,offset outcome mov ah,09h int 21h mov di,offset min mov dl,di add dl,0 ;比较后的最小值为十进制,需要转化为ascii mov ah,02h int 21h mov dl,di+1 add dl,0 int 21h mov dl,0ah int 21h pop di pop ax pop ds pop dx retshow_min endpclear proc near ; 最后没用上 push ax push cx push di mov di,offset input mov cx,countclr: mov ax,00h mov di,ax inc di inc di loop clr pop di pop cx pop ax retclear endp mov ah,4ch int 21hcodes ends end start3、模块层次图4、实验分析下图是实验输出结果截图。实验中以逗号为分隔符,逗号的个数不限制,以回车为输入结束标志符。对输入的数字进行了位数和范围的严格限制,即必须是两位数字,如果数字小于10,需要补齐零。说明:逗号分隔不同数字输入,回车结束。一位数后面逗号或回车都为错误,直接返回重新输入该数。各种输入错误的报错情况如果是个位数字输入错误,程序会自动清除已输入的十位的数据,只允许完全正确的完整两位数存在。五、实验总结这次学习并运用了子程序进行程序设计。子程序设计的最重要的地方在于入口参数、出口参数的设计与主程序之间的关系。还有子程序功能之前应该保护现场。本实验主要用到了三个子程序,一个是从键盘输入数字并进行判断输入是否正确,通过设置标志位(bl)用于向主程序反馈正误,第二个是进行比较的程序,比较的思路在思考题中已经给出不在累述,第三个则为dos界面的输出欢迎屏错误提示和结果屏的程序实现。分隔符、结束符的确认较为简单,只需一个比较就可以了。数字的确认需要两个比较,即必须在09之间。输入错误时调用09号功能输出提示字符串 。本次实验编写的还算顺利很早就能出结果了,但是有一个晚上我在看代码的时候不小心把ds改成了dx,导致原本可以运行的程序没法存储结果。最后熬夜两小时通过我使用的2012masm的单步测试,一步一步看哥哥寄存器数值的变化才找到在welc保护现场时,原本给ds的出栈赋给了dx。这手一抖给我造成了不小的麻烦,但却也让我加深对各个寄存器地址变化的理解。实验四 子程序设计一、实验目的1. 进一步掌握子程序设计方法;2. 进一步掌握基本的 dos 功能调用。二、实验内容1. 从键盘上输入某班学生的某科目成绩。输入按学生的学号由小到大的顺序输入。2. 统计检查每个学生的名次。3. 将统计结果在屏幕上显示。4. 为便于观察,输入学生数目不宜太多,以不超过一屏为宜。输出应便于阅读.尽可能考虑美观。5. 输入要有检错手段。三、预习思考1. 如何确定一个学生在这门科目中的名次?答:1.可以把学生成绩存入连续内存区域,即数组方式,取得每个学生的成绩偏移量,即成绩指针。然后初始化一个排名指针,比较指针所指的成绩的大小,根据比较结果改变排名指针所对应的成绩指针,完成排序。2.可以抽取每个学生的成绩和其他所有学生的成绩进行比较,然后统计比其分数高的学生,得出该学生的名次。我本次编程中使用的是第一种方法进行比较。2. 输入结束后,采用什么方法进行比较以得到学生的名次最为简单?答:采用移动指针完成排序的方法在汇编语言下实现,由于人数比较少,相对于冒泡法,选择排序法的程序代码还是比较简洁易读的。选择排序的时间和空间性能都还不错,可以接受。3. 准备好模块层次图。4. 给出输出显示的形式。答:制成一个表,分为三个属性分别为id,成绩和名次,设计为三列n行形式。具体显示情况参见实验分析部分的输出截图。四、实验过程1、流程图(这次的子程序设计要比实验三合理所以流程图也简洁明了多了)结束显示排序结果排序(选择排序法)获取id,分数获取人数开始2、源代码datas segment id db 400 dup(?); 存储学号mark db 20 dup(?); 存储分数rank db 20 dup(?); 存储排名ranktmp db 20 dup(?); 临时排序指针mtmp db ?; 临时记录成绩countb db ?; 总的学生的个数(字节)countw dw ?; 总的学生个数(字)cheok db ?; 输入检查标志位error db ?; 记录错误号tmp db 2 dup(?); 判断、计数cr db 0dh,0ah,$; 回车tab db 09h,09h,$; 输出tab键err0 db input cannot be empty!,$err2 db character is invalid!,$err4 db mark is invalid!,$err6 db input is invalid!,$errlist dw err0,err2,err4,err6tip0 db please re-input:,$tip1 db please input number of students:,$tip2 db please input id and mark:,$prtip db |=result=|,$prinfo db id,09h,09h,mark,09h,09h,rank,$getid db id : ,$getmark db mark: ,$buff db 16; 最长的字符长度pres db ?; 存储实际输入字符数char db 16 dup(?); 实际可存储有效字符16个(北邮学号15位,最后一位设为$)datas endsstacks segment stack stackdb 100 dup(?)stacks endscodes segment assume cs:codes,ds:datas,es:datas,ss:stacksprinttip macro parapush axpush dxmov ah,09hmov dx,offset paraint 21hpop dxpop axendmprintchar macro acharpush axpush dxmov ah,02hmov dl,acharint 21hpop dxpop axendmstart: mov ax,datas mov ds,ax mov es,ax call getnumber; 人数 call getinsid_and_mark; 学号和分数 call sort; 排序 call print; 显示back:mov ax,4c00h; 返回dos int 21hgetin proc near ; 字符串输入,pres存储实际输入字数,char临时存储字符push axpush dxpush dimov dx,offset buffmov ah,0ahint 21hpop dipop dxpop axretgetin endpcheck proc nearpush dipush cxpush axxor di,di; 记录char读取的偏移量mov al,pres; 读取输入的buff中的字符数cbwmov cx,axcmp cx,0; 判断是否输入buff为空je isempty; 为空,重新输入again: ; 判断是否为纯数字 cmp cx,dije returncheckmov ah,chardicmp ah,30h jl invalid; 小于0,无效字符cmp ah,39h jg invalid; 大于9,无效字符inc dijmp againisempty: mov error,0; 输入为空的处理代码printtip crcall printerrprinttip crmov cheok,1jmp returncheckinvalid: mov error,2; 输入不合法的处理代码printtip crcall printerrprinttip crmov cheok,1returncheck:pop axpop cxpop diretcheck endpgetinsid_and_mark proc nearpush axpush bxpush cxpush dxpush sipush diprinttip tip2mov tmp,0; 学号还是分数xor bx,bx; id的偏移量xor ax,ax; 记录学生数目more:printtip crcmp countb,aljnz here1jmpreturn; 计数器为0,返回主程序here1: cmp tmp,0je gidcmp tmp,1je gmarkgid: printtip getidjmp here2gmark: printtip getmarkhere2:call getin; 接受输入call check; 检查是否是数字且不为空cmp cheok,0jne chefailcmp tmp,0je isid; 输入学号cmp tmp,1 je ismark ; 输入分数chefail:printtip tip0 printtip crmov cheok,0; 返回判断位置零jmp moreisid:mov dl,pres xor dh,dhmov cx,dxmov si,cxinc cxmov charsi,$mov tmp,1; 学号和分数是配套的,输入完学号,下一次的输入类型是分数cldmov si,offset charmov di,offset idadd di,bxrep movsb; 写入idadd bx,16; id的偏移地址向后挪动固定的16bytejmp more; 跳回继续输入下一个buffismark:call transformcmp cheok,0je writemarkmov error,4jmp chefailwritemark:push bxmov bl,mtmpmov di,axmov markdi,bl; 实际写入成绩pop bxmov tmp,0; 计数清理inc ax; 已接受的学生数+1jmp morereturn:pop dipop sipop dxpop cxpop bxpop axretgetinsid_and_mark endptransform proc near ; 输入分数时,进行十进制转制的特殊处理push axpush bxpush cxmov cl,pres ; 获取分数的位数cmp cl,3ja minvalid; 四位数或以上,溢出je thr; 三位数cmp cl,2je two; 两位数cmp cl,1je one; 一位数thr: ; 分数为三位数的情况只能是100,要进行专门的判断 mov bl,char0; 百位sub bl,30hcmp bl,1jne minvalidmov bl,char1; 十位sub bl,30hcmp bl,0jne minvalidmov bl,char2; 个位sub bl,30hcmp bl,0jne minvalidmov mtmp,100 jmp creturntwo:mov bl,char0; 十位sub bl,30hcmp bl,0je minvalidmov al,10mul bl; 乘以10取得十位数mov bl,char1; 个位sub bl,30hadd al,blmov mtmp,al; 写入转换后的数字jmp creturnone: ; 一位数时直接写入临时成绩区mov bl,char0; 个位sub bl,30hmov mtmp,bljmp creturnminvalid:mov error,4call printerrmov cheok,1 creturn:pop cxpop bxpop axrettransform endpprinterr proc nearpush axpush dxpush bx mov al,errorcbwmov bx,axmov ah,09h mov dx,errlistbxint 21hpop bxpop dxpop axretprinterr endpsort proc near;选择排序法push axpush bxpush cxpush dxpush sipush dimov al,countb; 读取学生数目xor bx,bx; bx作寻址计数器init: dec al ; 初始化排名,此时默认按录入倒序排名mov ranktmpbx,al ; 第一名的成绩是最后一个录入的,以此类推inc bxcmp al,0jne init mov cx,countw; cx记录总学生人数 xor di,di dec di lop2: inc di cmp di,cx jz wrrak mov al,ranktmpdixor ah,ahmov bx,axmov dl,markbx ; 取出成绩1放入dlmov si,dilop1: inc si cmp si,cx jz lop2 mov al,ranktmpsixor ah,ahmov bx,axmov dh,markbx; 同理取出成绩2放入dhcmp dl,dhjge lop1mov ah,ranktmpdi; 交换分数指针xchg ah,ranktmpsimov ranktmpdi,ahmov dl,dh ; 把比较过的较高分作为r0继续进行比较jmp lop1 wrrak: xor si,simov cx,countwmov bl,1; 保存名次ranksave: cmp si,cxje finishmov al,ranktmpsi; 提取该名次学生的地址指针xor ah,ahmov di,axmov rankdi,bl; 写入学生名次inc blinc sijmp ranksavefinish: pop dipop sipop dxpop cxpop bxpop axretsort endpprint proc nearpush axpush bxpush cxpush dxpush siprinttip crprinttip prtip printtip crprinttip prinfoprinttip crmov cx,countw; cx保存学生数xor si,si; si指明当前处理的学生序号xor bx,bx; bx保存当前输入学号偏移量nextprint:mov tmp1,0; 对打印名次置标志位cmp si,cxjne printidjmp pretprintid: ; 打印学号,直接字符串打印mov ah,09hmov dx,offset idadd dx,bx ; bx是相邻id存储单元首字节的间隔位int 21hprinttip tabprintmark:mov al,marksicmp al,100je ptthrcmp al,10jl ptonejmp pttwoptthr:printchar 1printchar 0printchar 0jmp nextpttwo: cbwpush bxmov bl,10div blmov bx,ax ;ah是余数即个位,al是商即十位add bl,30hadd bh,30hprintchar blprintchar bhpop bxjmp nextptone:add al,30hprintchar alnext:printtip tabmov al,ranksiadd al,30hprintchar alfinishp:printtip cr inc siadd bx,16 jmp nextprintpret:pop sipop dxpop cxpop bxpop axretprint endpgetnumber proc nearpush axpush bxhe:printtip tip1grep: call getinmov cheok,0call checkcmp cheok,0je greturnmov error,6call printerrprinttip tip0 printtip crjmp greperrhere: printtip crmov error,6call printerrprinttip tip0jmp grep greturn: call transformmov al,mtmpcmp al,0je errheremov countb,al cbwmov countw,axprinttip crpop bxpop axretgetnumber endpcodes ends end start4、实验分析输出:子程序模块化较多,使用数组存储,直接寻址。排序时用指针,选择排序。出错有提示。各种报错输出:五、实验总结这是所有实验里面耗时最长的一个,我一共做了三天,刚开始认为这个实验的重点在于数据的存储方式和排序方式,因为最后输出的每一组都需要有固定的三个属性(id、成绩和排名),用了一个早上实现了sort和数据的存储(使用三个数组分别存储三个属性,并引入临时指针来调整实际排名)之后开始卡在了输入和界面的设计上面,敲了一晚上代码发现重复性极高 ,于是想到了老师教过的宏编译,第二天自己尝试的模仿书上已有的例子将所有需要的屏幕输出都通过定义的两个宏编译(字符输出和字符串输出)来实现。通过宏编译大大减小了我的工作量。由于在实验二中已经编写过输入检错的程序,所以本实验中这个内附功能也迎刃而解倒是因为需要输入的项目有三个,为了区分错误,对错误进行了分类,起初没有errlist这个数据变量,还要用offset来获取erro字符串的偏移地址,在用0.2.4.6来做累死数组的获取有点繁琐。回头对程序优化的时候想到了可以用变量来存储偏移地址,简化字符串的提取步骤。之后看到我同学做的程序界面特别棒,然后也借鉴了他的方法,使用了各种回车空格tab来进行界面的布局。但是依据输出字符串长度调整间隔的想法因为有点繁琐而且时间确实不多了不得不放弃不再完善。通过这个实验中,我进一步掌握了子程序的设计方法,使整个程序的运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度电商物流仓储设施采购合同
- 2025版企业安全生产标准化评审与整改服务合同
- 2025版墙体改造与梁柱抗震加固施工合同
- 2025版施工现场围板租赁与施工项目管理合同
- 2025年度暑假工临时合同范本:青年社会实践服务协议
- 2025年度软件开发项目团队激励与考核合同
- 2025年度教育机构财务规划与资源整合合同
- 2025电力线路改造工程设计与施工一体化合同
- 2025版新能源充电基础设施建设合作合同
- 2025年度矿山环保工程采矿权抵押合作合同范文
- 学校中层行政培训
- 项目的运营规划
- 电子烟设计技术讲解课件
- 输电线路缺陷课件
- 保险核保岗位招聘笔试题与参考答案(某世界500强集团)2025年
- 《品类管理》教材正文
- 高职高考英语词汇表
- 必刷题2024七年级数学下册数据分析专项专题训练(含答案)
- GB/T 4706.19-2024家用和类似用途电器的安全第19部分:液体加热器的特殊要求
- 12D401-3 爆炸危险环境电气线路和电气设备安装
- DL∕T 796-2012 风力发电场安全规程
评论
0/150
提交评论