汇编语言基础ASM_第1页
汇编语言基础ASM_第2页
汇编语言基础ASM_第3页
汇编语言基础ASM_第4页
汇编语言基础ASM_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、32位微机原理与接口技术实验教程 启东计算机厂有限公司第一部分 汇编语言基础实验 一、说明 1下面的实验例程都是汇编语言程序设计方面的基础实验,实验时只需pc微机一台。 2所有的实验例程均可以在dvcc32jhp集成软件环境下运行和调试。 3在实验前必须先仔细阅读随机配备的用户手册,以便对整个系统的硬件结构和设计思想有所了解,特别要仔细阅读软件安装使用部分,以便了解dvcc32jhp集成软件运行环境和操作方法,为后面顺利进行编程实验做好充分准备。二、实验程序目录1显示程序实验 dva1.asm 2. 数据传送实验 dva2.asm 3. 数制转换实验 dva31.asm ascii 码表示的十

2、进制数转换为二进制数4. 数制转换实验 dva32.asm 十进制数的ascii 码转换为bcd码 5. 数制转换实验 dva33.asm 十六进制数的ascii 码转换为十进制数6. 数制转换实验 dva34.asm bcd码转换为二进制码7. 运算实验 dva41.asm 二进制双精度加法运算8. 运算实验 dva42.asm 十进制数的bcd 码减法运算9. 运算实验 dva43.asm 乘法运算实验10. 运算实验 dva44.asm 用减奇数开平方运算实验11. 分支程序设计实验 dva5.asm 12. 循环程序设计实验 dva6.asm 13. 子程序实验 dva71.asm 数

3、据移动实验14. 子程序实验 dva72.asm 数码转换及显示实验15. 综合程序设计实验 dva81.asm 排序实验16. 综合程序设计实验 dva82.asm 用32 位寄存器、指令、扩展寻址方式实现数码转换及显示三、汇编语言程序的基本结构 3.1 伪指令 1指令集选择伪指令 在缺省情况下,masm 和tasm 只识别8086/8088 的指令,为了让编译器可以识别80386 及其以上微处理器的新增指令或功能增强的指令,必须在程序中使用提示处理器类型的伪指令。 在一个源程序中,可以根据需要安排多条说明处理器类型的伪指令。对tasm 来说,该类伪指令可安排在源程序中任何位置,但对masm

4、 ,该类伪指令只能安排在段外。通常,表示处理器类型的伪指令有如下几条: .8086 选择8086/8088 指令集,可省略 .386 选择80386 指令集 .386p 选择80386 指令集,包括特权指令 .486 选择80486 指令集 .486p 选择80486 指令集,包括特权指令 2 段定义伪指令segment/ends 在实模式下,32 位处理器为了保持向上兼容,所以段的最大长度仍然为64k,这样的段称为16 位段,但在保护模式下,段长度可以达到4gb ,这样的段称为32 位段。为了兼容,保护模式下也可以使用16 位段。一般一个完整的段定义格式如下: segment 定位类型组合类

5、型类别属性类型 ;段内容 ends 表2-1 定位类型说明定位类型含义byte用下一个可用字节地址word用下一个可用字地址dword用下一个可用双字地址para用下一个可用节地址(16 字节为节边界)page用下一个可用页地址(256 字节为页边界) (1) 定位类型规定段的起始位置类型,有五种方式:byte ,word ,dword ,para ,page ,如表2-1 所示。 (2) 组合类型规定本段与其他段的关系:public ,common,stack,memory ,at , private。组合类型的使用,为的是更有效的使用存储器。它通知连接器如何把不同模块内段名相同的段组合到一

6、起。 (3) 类别用于表示段的分类。如data,code,连接器总是使类型相同的段相邻,由用户指定。 (4) 属性类型规定16 位段或32 位段。use16 表示16 位段,use32 表示 32 位段。3 数据定义伪指令 数据定义伪指令功能是为操作数分配存储单元,并用变量与存储单元相联系。其一般格式为:变量助记符操作数 其中助记符可以是: db :一个操作数占用一个字节单元,定义的变量为字节变量; dw :一个操作数占用一个字单元,定义的变量为字变量; dd :一个操作数占用一个双字单元,定义的变量为双字变量; df :一个操作数占用一个三字单元,定义的变量为三字变量,该助记符仅用于386

7、以上的cpu,定义的变量作为指针使用,其低4 字节存放偏移地址,高2 字节存放段地址; dq :一个操作数占用一个四字单元,定义的变量为四字变量; dt :一个操作数占用十个字节单元,定义的变量为十字节变量,使用该助记符时,对于十进制操作数,必须给出后缀d ,没有后缀的默认为压缩bcd 码。 4 段说明伪指令assume 段说明伪指令的一般格式如下: assume : , :段名 , assume :nothing可以用来取消段性质的规定。 5 符号定义伪指令 (1) 等值伪指令equ ,其一般格式为: equ (2) 等号伪指令“=” 的格式与功能和equ 类似。不同的是,在同一个程序中,“

8、=”可以对一个符号重复定义,equ 却不能对同一个符号重复定义。 (3) 解除定义伪指令purge的功能是解除指定符号的定义,解除符号定义后,可用equ 重新定义,其一般格式为: purge6 过程定义伪指令proc/endp 过程定义伪指令proc/endp 格式如下: proc 属性 ret endp 过程名也是一种标号,其属性由属性字段表明。过程属性可以是near(默认类型,可省 略)或far ,调用过程指令和被调用过程在同一逻辑段,过程则可定义为near ,否则定义为far。根据过程的属性,ret 指令自动汇编成近过程返回指令或远过程返回指令。 另外,若调用过程指令和被调用过程不在同一

9、程序模块中(即调用程序和被调用过程分属两个文件),则在调用程序中用extrn 伪指令将被调用过程说明成外部的,而在过程程序中用 public 伪指令说明成公用的。 7 标号定义伪指令label 标号定义伪指令label 是定义标号为指定的属性,其一般格式为: 标号 label 属性 3.2 语句格式 1标号 标号用来代表一条指令,代表一条指令所在单元的地址,在代码段中使用。标号与其所代表的指令之间用冒号分开。如果一条指令作为转移的目标或作为程序中的第 1 条指令语句,前面应该加标号,否则没有必要加标号。其格式为:“标号:指令语句”。标号有三个属性:段属性、偏移属性和类型属性。 段属性:标号所代

10、表指令单元的段地址,即代码段的段地址。 偏移属性:标号所代表指令单元的段内偏移地址。 类型属性:用来指明标号是段内引用(类型为near ,转移源和转移目标在同一个代码段中),还是段间引用(类型为far ,转移源和转移目标在不同的代码段中)。 2 变量 变量用来代表数据所在单元的地址,在数据段、附加段、堆栈段中使用。变量与其所代表的数据之间用空格分开。变量也有三个属性:段属性、偏移属性和类型属性。 段属性:变量所代表数据单元的段地址(ds 值、es 值或ss 值)。 偏移属性:变量所代表数据单元的段内偏移地址。 类型属性:用来指明变量所代表数据单元的字节数,db、dw、dd、df、dq、dt所定

11、义变量的类型值分别为1、2、4、6、8、10。 在同一个程序中,一个标号或变量只能定义一次,不能重复定义。 3 操作码操作码用来指明操作的性质或功能。指令中的助记符都是操作码。操作码与操作数之间用空格分开。 4 操作数 指令中的操作数用来指定参与操作的数据。对于一般指令,可以有一或两个操作数,也可以没有操作数;对于伪指令和宏指令,可以有多个操作数。操作数多于一个时,操作数之间用逗号分开。操作数可以是常数或表达式。 5 注释项 注释是语句的说明部分,用来说明一条指令或一段程序的功能,由分号“;”开始。汇编源程序时,注释部分不产生机器代码。 6 续行符 一条语句可以写在多行上,续行符为。 7 重复

12、操作符dup 重复定义多个相同单元的数据时采用。如 a db 3 dup (?)相当于a db ?,?,? 8 保留符号? 根据数据定义伪指令的类型,保留相应单位的内存空间,不赋初值。 9 当前地址指针$ 在汇编程序对汇编语言源程序进行汇编的过程中,当前正在汇编的指令的地址用当前地址指针$指示。对分配内存空间的数据定义伪指令,当前数据分配的位置用$指针指示。即当前地址指针总是指向待分配的内存单元的地址。用户可以直接引用当前地址指针的值。如: a db “hello” len equ $-a 3.3 dos 系统功能调用 dos 系统功能调用是汇编程序通过int 21h 软件中断来调用dos 内

13、部的子程序而进行某种操作的一个方法,dos 系统功能调用在实模式下的编程中应用很广泛,大致有上百种功能,这些功能的具体含义和参数设置可查阅手册,而功能调用的基本格式如下: mov ah ,功能号 ;准备入口参数 int 21h 下面列出汇编语言程序设计中经常使用的两种功能调用及其说明。109h 号功能调用 将数据段(ds)中以字符结尾的一个字符串输出到屏幕上。 入口参数:dx 寄存器存放该字符串的首地址(有效地址部分) 出口参数:无 注意: 9 号系统功能调用破坏al 寄存器内容,应注意保存。 格式: lea dx ,字符串变量名 mov ah ,9 int 21h 2 程序正常返回dos 系

14、统的方法 (1) 调用 4ch 号系统功能 功能:返回系统 入口参数: al=终止代码或无 格式: mov ah ,4ch int 21h 或: mov ax ,4c00h int 21h (2) 使用语句 int 20h 功能:返回系统 入口参数:cs 指向程序段前缀 实验一 显示程序实验一、实验目的 (1) 掌握在pc 机上以十六进制形式显示数据的方法。 (2) 掌握部分dos 功能调用使用方法。 (3) 熟悉dvcc32jhp集成软件调试环境。 二、实验内容及说明 一般来说,有很多程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。本实验要求将指定数据区的字符以

15、十六进制数形式显示在屏幕上,并通过dos功能调用完成一些提示信息的显示。实验中可使用dos 功能调用(int 21h)。本实验显示第一行“show a as hex:”,第二行“”,是字符“a”的十进制数(61)。 (1) 显示单个字符输出 入口:ah=02h 调用参数:dl=输出字符 (2) 显示字符串 入口:ah=09h 调用参数:ds:dx= 串地址,$为结束字符 (3) 键盘输入并回显 入口:ah=01h 返回参数:al=输出字符 (4) 返回dos 系统 入口:ah=4ch 调用参数:al=返回码三、实验步骤 (1) 运行dvcc32jhp软件,选择编辑edit 菜单,根据实验内容的

16、描述编写实验程序或选择open菜单打开程序。(2) 使用“asm编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。 (3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。 (4) 更改数据区中的数据,考察程序的正确性。 四、参考流程图 ynny取字节的高4位数据是否=a? esc? 开始是a-f,加7h转换成ascii码送屏幕显示取字节的低4位数据是否=a? esc?是a-f,加7h转换成ascii码送屏幕显示 图1-1 显示程序实验流程图 五、参考程序参考实验程序文件名dva1.a

17、sm(在文件夹“asm_汇编例程”中)实验程序清单如下: stack1 segment stack dw 256 dup(?)stack1 endsdatasegmentuse16mes db show a as hex:,0ah,0dh,$sd db adataendscodesegmentuse16assumecs:code,ds:datastart:mov ax,datamovds,ax mov dx,offset mesmovah,09hint 21hmovsi,offset sdmoval,ds:siandal,0f0hshral,4cmpal,0ahjbc2addal,07hc2:

18、addal,30hmovdl,almovah,02hint21hmoval,ds:siandal,0fhcmpal,0ahjbc3add al,07hc3:addal,30hmovdl,almovah,02hint21hstart0: mov ah,06hmov dl,0ffhint 21hje start0movax,4c00hint21hcodeendsendstart实验二 数据传送实验一、实验目的 (1) 熟悉dvcc32jhp 调试运行环境。 (2) 掌握与数据有关的不同寻址方式。 二、实验内容 本实验要求将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上显示。

19、 三、实验步骤 (1) 运行dvcc32jhp软件,选择编辑edit 菜单编写实验程序或选择open菜单打开程序。 (2) 使用“asm编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。(3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。 (4) 更改数据区中的数据,考察程序的正确性。 四、参考程序参考实验程序文件名dva2.asm(在文件夹“asm_汇编例程”中)实验程序清单如下: ddata segment ;定义源数据段 msr db hello,world!$ len eq

20、u $- msr ddata ends exda segment ;定义附加数据段 msd db len dup(?) exda ends mystack segment stack ;定义堆栈段 dw 20 dup(?) mystack ends code segment ;定义代码段 assume cs:code,ds:ddata,es:exda start: mov ax,ddata mov ds,ax ;装载数据段寄存器 mov ax,exda mov es,ax ;装载附加数据段寄存器 mov si,offset msr ;设置si mov di,offset msd ;设置di m

21、ov cx,len next: mov al,si ;开始传输数据 mov es:di,al inc si inc di dec cx jnz next push es pop ds ;将附加段寄存器指向的段值赋给数据段寄存器 mov dx,offset msd mov ah,9 int 21h start0: mov ah,06h ;判断是否有键按下 mov dl,0ffh int 21h je start0 ;若没有转start0 mov ax,4c00h ;有键返回dos int 21hcode ends end start 如果将程序主体部分的寄存器间接寻址方式改为相对寻址方式,则如下

22、所示: mov bx,0 mov cx,len next: mov al,msrbx mov es:msdbx,al inc bx loop next实验三 数码转换程序实验一、实验目的 掌握不同进制数及编码相互转换的程序设计方法。 二、实验内容及说明 计算机输入设备输入的信息一般是由ascii 码或bcd 码表示的数据或字符,cpu 一般均 用二进制数进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ascii 码、bcd 码或七段显示码等。因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。计算机与外设间的数码转换关系如图3-1 所示。数码转换对应关系表3-1。 表3-

23、1 数码转换对应关系表十六进制数bcd 码二进制机器码asc码七段码共阳共阴00000000030h40h3fh10001000131h79h06h20010001032h24h5bh30011001133h30h4fh40100010034h19h66h50101010135h12h6dh60110011036h12h7dh70111011137h78h07h81000100038h00h7fh91001100139h18h67ha101041h08h77hb101142h03h7chc110043h46h39hd110144h21h5ehe111045h06h79hf111146h0eh7

24、1h 1将ascii 码表示的十进制数转换为二进制数 十进制数可以表示为:dn 10n +dn-1 10n-1+d0 100 =di10i 中di代表十进制数 1、2、3 . 9、0。 上式可以转换为:di10i =(dn 10+dn-1 )10)+ dn-2)10+di ) 10+d0 由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位d 开始作乘10 加次位的操作,依次类推,则可求出二进制数结果。二进制位码段码二进制bcd码ascii码ascii码键盘、光机电拨码开关主 机数据开关crt显示、打印机多段显示位显示图3-1 计算机与外设间的数码转换关系 本实验要求将缓冲区中的一个五位

25、十进制数00012 的ascii 码转换成二进制数,并将转换结果按位显示在屏幕上。转换过程的参考流程如图3-2 所示。 yn开始取第一位ascii码确定转换数的位数n减30hcx = n-1乘以10加下一位ascii码减30h转换完否?送屏幕显示 图3-2 十进制ascii 转换为二进制数参考流程2 将十进制数的ascii 码转换为bcd码 本实验要求将键盘输入的一个五位十进制数 54321的asc 码存放在数据区中,转换为bcd码后 ,将转换结果按位分别显示于屏幕上。若输入的不是十进制数的asc码,则输 出“ff”。提示:一字节asc码取其低四位即变为bcd 码。转换部分的实验流程参见3-3

26、。ynyn开始bl = 0ffh确定转换数的位数n取数cx = n保存bl到相应单元bl = ascii-30h转换完否?送屏幕显示是否0-9的ascii吗?图3-3 十进制数的ascii 码转换为bcd码参考流程3 将十六进制数的ascii 码转换为十进制数 十六位二进制数值域0-65535,最大可转换为五位十进制数。五位十进制数可表示为: nd = d4104 + d3103 + d2102 + d1101 +d0 因此,将十六位的二进制数转换为5位ascii 码表示的十进制数,就是求d1 - d4 ,并将它们转化为ascii码供显示。本实验要求将缓冲区中存放的000ch的ascii码转换

27、为十进制数,并将转换结果显示在屏幕上。其实验流程图见图3-4。yn开始si = si-1取出转换数ax = 转换数si指向存储单元的尾地址ax除以10,ax = 商,dx = 余数将余数转化为ascii码并保存商为0?送屏幕显示将余下位填充为0图3-4 将十六进制数的ascii 码转换为十进制数参考流程4bcd码转换为二进制码本实验要求将四个二进制的bcd码存放在某一单元中,转换出的二进制数码存入其后的内存单元中,转换结束送屏幕显示。参考流程图见图3-5。yn开始乘以10cx = 转换的个数取保存到相应单元取数的个位取数的十位,与个位相加将指针指向下一个数商为0?送屏幕显示 图3-5 bcd

28、码转换为二进制码参考流程三、实验步骤 (1) 运行dvccjh32p 软件,选择编辑edit 菜单,根据实验内容描述的数码转换内容分别编写实验程序。 (2) 使用“asm编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。 (3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。 (4) 更改数据区中的数据,考察程序的正确性。四、参考程序1将ascii 码表示的十进制数转换为二进制数实验源文件名dva3_1.asm(在文件夹“asm_汇编例程”中)实验程序清单如下:stack1 segm

29、ent stack dw 256 dup(?)stack1 endsddatasegmentmes db the ascii code of decimal code are:$buf db 30h,30h,30h,31h,32h db 10h dup(0)ddataendscode segmentassume cs:code,ds:ddatastart: mov ax,ddata mov ds,ax mov si,offset buf mov bx,000ah mov cx,0004h mov ah,00h mov al,si sub al,30ha1: imul bx add al,si+

30、01 sub al,30h inc si loop a1 mov si,ax mov dx,offset mes mov ah,09h int 21h inc si ;显示高字节 call show dec si ;显示低字节 call showstart0: mov ah,06h ;判断是否有键按下mov dl,0ffhint 21hje start0;若没有转start0mov ax,4c00h ;有键返回dosint 21h show proc near mov al,ds:si and al,0f0h ;取高4位 shr al,4 cmp al,0ah ;是否是a以上的数 jb c2

31、add al,07h c2: add al,30h mov dl,al ;显示字符 mov ah,02h int 21h mov al,ds:si and al,0fh ;取低4位 cmp al,0ah jb c3 add al,07hc3: add al,30h mov dl,al ;显示字符 mov ah,02h int 21h ret endpcode ends end start2 十进制数的ascii 码转换为bcd码实验源文件名dva3_2(在文件夹“asm_汇编例程”中) 实验程序清单如下:stack1 segment stack dw 256 dup(?)stack1 ends

32、ddatasegmentmesdbthe bcd code of decimal are:$bufdb31h,32h,33h,34h,35hdb10h dup(0)ddataendscode segmentassume cs:code,ds:ddatastart:movax,ddatamovds,axmov cx,0005hmov di,offset bufa1:movbl,0ffhmoval,dicmpal,3ah;比较al中的数是否是0-9的ascii码 jnb a2sub al,30hjb a2mov bl,ala2:mov al,blmov di+05h,alinc diloop a1

33、movsi,dimovcx,05hmovdx,offset mesmovah,09hint 21ha3:call showmovdl,20hmovah,02hint21hincsiloop a3start0: mov ah,06h ;判断是否有键按下mov dl,0ffhint 21hje start0 ;若没有转start0 mov ax,4c00h ;有键返回dosint 21hshowprocnearmoval,ds:siandal,0f0h;取高4位shral,4cmpal,0ah;是否是a以上的数jbc2addal,07hc2:addal,30hmovdl,al;显示字符 movah

34、,02hint21hmoval,ds:siandal,0fh;取低4位cmpal,0ajbc3add al,07hc3:addal,30hmovdl,al;显示字符movah,02hint21hretendpcode ends end start3 十六进制数的ascii 码转换为十进制数实验源文件名dva3_3.asm(在文件夹“asm_汇编例程”中)实验程序清单如下:stack1 segment stack dw 256 dup(?)stack1 endsddatasegmentmesdbthe ascii code of hex are:$bufdb0ch,00hdb10h dup(0)

35、ddataendscode segmentassume cs:code,ds:ddatastart:movax,ddatamovds,axmovsi,offset bufmov dx,simovbx,siaddbx,2addsi,7a1:dec simov ax,dxmov dx,0000hmov cx,000ahdiv cxxchg ax,dxadd al,30hmov si,alcmp dx,0000hjne a1a2:cmp si,bxjz a3dec simov al,30hmov si,al jmp a2a3:movcx,5movsi,offset bufaddsi,2movdx,o

36、ffset mesmovah,09hint21ha4:call showmovdl,20hmovah,02hint21hincsiloop a4start0: mov ah,06h;判断是否有键按下mov dl,0ffhint 21hje start0;若没有转start0 mov ax,4c00h ;有键返回dosint 21hshowprocnearmoval,ds:siandal,0f0h;取高4位shral,4cmpal,0ah;是否是a以上的数jbc2addal,07hc2:addal,30hmovdl,al;显示字符 movah,02hint21hmoval,ds:siandal,

37、0fh;取低4位cmpal,0ahjbc3add al,07hc3:addal,30hmovdl,al;显示字符 movah,02hint21hretendpcode ends end start4bcd码转换为二进制码实验源文件名dva3_4.asm(在文件夹“asm_汇编例程”中)实验程序清单如下:stack1 segment stack dw 256 dup(?)stack1 endsddatasegmentmesdbthe bcd code of binary are:$bufdb01h,07h,03h,04h,05h,01h,06h,08hdb10h dup(0)ddataendsc

38、ode segmentassume cs:code,ds:ddatastart:movax,ddatamovds,axmov cx,0004hmov di,offset bufa1:mov al,diadd al,almov bl,aladd al,aladd al,aladd al,blinc dimov ah,00hadd al,dimov di+07h,axinc diloop a1movdx,offset mesmovah,09hint21hmovcx,04hmovdi,offset bufadddi,08ha2:movax,dicall shwordmovdl,20hmovah,02hint21hincdiincdiloop a2start0: mov ah,06h ;判断是否有键按下mov dl,0ffhint 21hje start0 ;若没有转start0 mov ax,4c00h ;有键返回dosint 21hshwordprocnearmovbl,ahcall showmovbl,alcall showretendpshowprocnearpush axpush dxmoval,blandal,0f0h;取高4位shral,4cmpal,0ah;是否是a以上的数jbc2addal,07hc2:addal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论