汇编语言基础ASM

上传人:1666****666 文档编号:38538277 上传时间:2021-11-08 格式:DOC 页数:53 大小:445KB
返回 下载 相关 举报
汇编语言基础ASM_第1页
第1页 / 共53页
汇编语言基础ASM_第2页
第2页 / 共53页
汇编语言基础ASM_第3页
第3页 / 共53页
点击查看更多>>
资源描述
32位微机原理与接口技术实验教程 启东计算机厂有限公司第一部分 汇编语言基础实验 一、说明 1下面的实验例程都是汇编语言程序设计方面的基础实验,实验时只需PC微机一台。 2所有的实验例程均可以在DVCC32JHP集成软件环境下运行和调试。 3在实验前必须先仔细阅读随机配备的用户手册,以便对整个系统的硬件结构和设计思想有所了解,特别要仔细阅读软件安装使用部分,以便了解DVCC32JHP集成软件运行环境和操作方法,为后面顺利进行编程实验做好充分准备。二、实验程序目录1显示程序实验 DVA1.ASM 2. 数据传送实验 DVA2.ASM 3. 数制转换实验 DVA31.ASM ASCII 码表示的十进制数转换为二进制数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 数据移动实验14. 子程序实验 DVA72.ASM 数码转换及显示实验15. 综合程序设计实验 DVA81.ASM 排序实验16. 综合程序设计实验 DVA82.ASM 用32 位寄存器、指令、扩展寻址方式实现数码转换及显示三、汇编语言程序的基本结构 3.1 伪指令 1指令集选择伪指令 在缺省情况下,MASM 和TASM 只识别8086/8088 的指令,为了让编译器可以识别80386 及其以上微处理器的新增指令或功能增强的指令,必须在程序中使用提示处理器类型的伪指令。 在一个源程序中,可以根据需要安排多条说明处理器类型的伪指令。对TASM 来说,该类伪指令可安排在源程序中任何位置,但对MASM ,该类伪指令只能安排在段外。通常,表示处理器类型的伪指令有如下几条: .8086 选择8086/8088 指令集,可省略 .386 选择80386 指令集 .386P 选择80386 指令集,包括特权指令 .486 选择80486 指令集 .486P 选择80486 指令集,包括特权指令 2 段定义伪指令SEGMENT/ENDS 在实模式下,32 位处理器为了保持向上兼容,所以段的最大长度仍然为64K,这样的段称为16 位段,但在保护模式下,段长度可以达到4GB ,这样的段称为32 位段。为了兼容,保护模式下也可以使用16 位段。一般一个完整的段定义格式如下: <段名> SEGMENT 定位类型组合类型类别属性类型 ;段内容 <段名> 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。组合类型的使用,为的是更有效的使用存储器。它通知连接器如何把不同模块内段名相同的段组合到一起。 (3) 类别用于表示段的分类。如DATA,CODE,连接器总是使类型相同的段相邻,由用户指定。 (4) 属性类型规定16 位段或32 位段。USE16 表示16 位段,USE32 表示 32 位段。3 数据定义伪指令 数据定义伪指令功能是为操作数分配存储单元,并用变量与存储单元相联系。其一般格式为:变量助记符操作数 其中助记符可以是: DB :一个操作数占用一个字节单元,定义的变量为字节变量; DW :一个操作数占用一个字单元,定义的变量为字变量; DD :一个操作数占用一个双字单元,定义的变量为双字变量; DF :一个操作数占用一个三字单元,定义的变量为三字变量,该助记符仅用于386 以上的CPU,定义的变量作为指针使用,其低4 字节存放偏移地址,高2 字节存放段地址; DQ :一个操作数占用一个四字单元,定义的变量为四字变量; DT :一个操作数占用十个字节单元,定义的变量为十字节变量,使用该助记符时,对于十进制操作数,必须给出后缀D ,没有后缀的默认为压缩BCD 码。 4 段说明伪指令ASSUME 段说明伪指令的一般格式如下: ASSUME <段寄存器名> :<段名> ,<段寄存器名> :段名> , ASSUME <段寄存器名> :NOTHING可以用来取消段性质的规定。 5 符号定义伪指令 (1) 等值伪指令EQU ,其一般格式为: <符号名> EQU <表达式> (2) 等号伪指令“=” 的格式与功能和EQU 类似。不同的是,在同一个程序中,“=”可以对一个符号重复定义,EQU 却不能对同一个符号重复定义。 (3) 解除定义伪指令PURGE的功能是解除指定符号的定义,解除符号定义后,可用EQU 重新定义,其一般格式为: PURGE<符号1,符号2 ,符号n>6 过程定义伪指令PROC/ENDP 过程定义伪指令PROC/ENDP 格式如下: <过程名> PROC 属性 RET <过程名> ENDP 过程名也是一种标号,其属性由属性字段表明。过程属性可以是NEAR(默认类型,可省 略)或FAR ,调用过程指令和被调用过程在同一逻辑段,过程则可定义为NEAR ,否则定义为FAR。根据过程的属性,RET 指令自动汇编成近过程返回指令或远过程返回指令。 另外,若调用过程指令和被调用过程不在同一程序模块中(即调用程序和被调用过程分属两个文件),则在调用程序中用EXTRN 伪指令将被调用过程说明成外部的,而在过程程序中用 PUBLIC 伪指令说明成公用的。 7 标号定义伪指令LABEL 标号定义伪指令LABEL 是定义标号为指定的属性,其一般格式为: 标号 LABEL 属性 3.2 语句格式 1标号 标号用来代表一条指令,代表一条指令所在单元的地址,在代码段中使用。标号与其所代表的指令之间用冒号分开。如果一条指令作为转移的目标或作为程序中的第 1 条指令语句,前面应该加标号,否则没有必要加标号。其格式为:“标号:指令语句”。标号有三个属性:段属性、偏移属性和类型属性。 段属性:标号所代表指令单元的段地址,即代码段的段地址。 偏移属性:标号所代表指令单元的段内偏移地址。 类型属性:用来指明标号是段内引用(类型为NEAR ,转移源和转移目标在同一个代码段中),还是段间引用(类型为FAR ,转移源和转移目标在不同的代码段中)。 2 变量 变量用来代表数据所在单元的地址,在数据段、附加段、堆栈段中使用。变量与其所代表的数据之间用空格分开。变量也有三个属性:段属性、偏移属性和类型属性。 段属性:变量所代表数据单元的段地址(DS 值、ES 值或SS 值)。 偏移属性:变量所代表数据单元的段内偏移地址。 类型属性:用来指明变量所代表数据单元的字节数,DB、DW、DD、DF、DQ、DT所定义变量的类型值分别为1、2、4、6、8、10。 在同一个程序中,一个标号或变量只能定义一次,不能重复定义。 3 操作码操作码用来指明操作的性质或功能。指令中的助记符都是操作码。操作码与操作数之间用空格分开。 4 操作数 指令中的操作数用来指定参与操作的数据。对于一般指令,可以有一或两个操作数,也可以没有操作数;对于伪指令和宏指令,可以有多个操作数。操作数多于一个时,操作数之间用逗号分开。操作数可以是常数或表达式。 5 注释项 注释是语句的说明部分,用来说明一条指令或一段程序的功能,由分号“;”开始。汇编源程序时,注释部分不产生机器代码。 6 续行符 一条语句可以写在多行上,续行符为。 7 重复操作符DUP 重复定义多个相同单元的数据时采用。如 A DB 3 DUP (?)相当于A DB ?,?,? 8 保留符号? 根据数据定义伪指令的类型,保留相应单位的内存空间,不赋初值。 9 当前地址指针$ 在汇编程序对汇编语言源程序进行汇编的过程中,当前正在汇编的指令的地址用当前地址指针$指示。对分配内存空间的数据定义伪指令,当前数据分配的位置用$指针指示。即当前地址指针总是指向待分配的内存单元的地址。用户可以直接引用当前地址指针的值。如: A DB “HELLO” LEN EQU $-A 3.3 DOS 系统功能调用 DOS 系统功能调用是汇编程序通过INT 21H 软件中断来调用DOS 内部的子程序而进行某种操作的一个方法,DOS 系统功能调用在实模式下的编程中应用很广泛,大致有上百种功能,这些功能的具体含义和参数设置可查阅手册,而功能调用的基本格式如下: MOV AH ,功能号 ;准备入口参数 INT 21H 下面列出汇编语言程序设计中经常使用的两种功能调用及其说明。109H 号功能调用 将数据段(DS)中以字符结尾的一个字符串输出到屏幕上。 入口参数:DX 寄存器存放该字符串的首地址(有效地址部分) 出口参数:无 注意: 9 号系统功能调用破坏AL 寄存器内容,应注意保存。 格式: LEA DX ,字符串变量名 MOV AH ,9 INT 21H 2 程序正常返回DOS 系统的方法 (1) 调用 4CH 号系统功能 功能:返回系统 入口参数: AL=终止代码或无 格式: MOV AH ,4CH INT 21H 或: MOV AX ,4C00H INT 21H (2) 使用语句 INT 20H 功能:返回系统 入口参数:CS 指向程序段前缀 实验一 显示程序实验一、实验目的 (1) 掌握在PC 机上以十六进制形式显示数据的方法。 (2) 掌握部分DOS 功能调用使用方法。 (3) 熟悉DVCC32JHP集成软件调试环境。 二、实验内容及说明 一般来说,有很多程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。本实验要求将指定数据区的字符以十六进制数形式显示在屏幕上,并通过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 菜单,根据实验内容的描述编写实验程序或选择Open菜单打开程序。(2) 使用“ASM编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。 (3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。 (4) 更改数据区中的数据,考察程序的正确性。 四、参考流程图 YNNY取字节的高4位数据是否>=A? ESC? 开始是A-F,加7H转换成ASCII码送屏幕显示取字节的低4位数据是否>=A? ESC?是A-F,加7H转换成ASCII码送屏幕显示 图1-1 显示程序实验流程图 五、参考程序参考实验程序文件名DVA1.ASM(在文件夹“ASM_汇编例程”中)实验程序清单如下: STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATASEGMENTUSE16MES DB 'Show a as hex:',0AH,0DH,'$'SD DB 'a'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOVDS,AX MOV DX,OFFSET MESMOVAH,09HINT 21HMOVSI,OFFSET SDMOVAL,DS:SIANDAL,0F0HSHRAL,4CMPAL,0AHJBC2ADDAL,07HC2: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) 掌握与数据有关的不同寻址方式。 二、实验内容 本实验要求将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上显示。 三、实验步骤 (1) 运行DVCC32JHP软件,选择编辑Edit 菜单编写实验程序或选择Open菜单打开程序。 (2) 使用“ASM编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。(3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。 (4) 更改数据区中的数据,考察程序的正确性。 四、参考程序参考实验程序文件名DVA2.ASM(在文件夹“ASM_汇编例程”中)实验程序清单如下: DDATA SEGMENT ;定义源数据段 MSR DB "HELLO,WORLD!$" LEN EQU $- 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 MOV 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 如果将程序主体部分的寄存器间接寻址方式改为相对寻址方式,则如下所示: 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-1 数码转换对应关系表十六进制数BCD 码二进制机器码ASC码七段码共阳共阴00000000030H40H3FH10001000131H79H06H20010001032H24H5BH30011001133H30H4FH40100010034H19H66H50101010135H12H6DH60110011036H12H7DH70111011137H78H07H81000100038H00H7FH91001100139H18H67HA101041H08H77HB101142H03H7CHC110043H46H39HD110144H21H5EHE111045H06H79HF111146H0EH71H 1将ASCII 码表示的十进制数转换为二进制数 十进制数可以表示为:Dn ×10n +Dn-1 ×10n-1+D0 ×100 =Di×10i 中Di代表十进制数 1、2、3 . 9、0。 上式可以转换为:Di×10i =(Dn ×10+Dn-1 )×10)+ Dn-2)×10+Di ) ×10+D0 由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位D 开始作乘10 加次位的操作,依次类推,则可求出二进制数结果。二进制位码段码二进制BCD码ASCII码ASCII码键盘、光机电拨码开关主 机数据开关CRT显示、打印机多段显示位显示图3-1 计算机与外设间的数码转换关系 本实验要求将缓冲区中的一个五位十进制数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。YNYN开始BL = 0FFH确定转换数的位数n取数CX = N保存BL到相应单元BL = ASCII-30H转换完否?送屏幕显示是否0-9的ASCII吗?图3-3 十进制数的ASCII 码转换为BCD码参考流程3 将十六进制数的ASCII 码转换为十进制数 十六位二进制数值域0-65535,最大可转换为五位十进制数。五位十进制数可表示为: ND = D4×104 + D3×103 + D2×102 + D1×101 +D0 因此,将十六位的二进制数转换为5位ASCII 码表示的十进制数,就是求D1 - D4 ,并将它们转化为ASCII码供显示。本实验要求将缓冲区中存放的000CH的ASCII码转换为十进制数,并将转换结果显示在屏幕上。其实验流程图见图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 码转换为二进制码参考流程三、实验步骤 (1) 运行DVCCJH32P 软件,选择编辑Edit 菜单,根据实验内容描述的数码转换内容分别编写实验程序。 (2) 使用“ASM编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。 (3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。 (4) 更改数据区中的数据,考察程序的正确性。四、参考程序1将ASCII 码表示的十进制数转换为二进制数实验源文件名DVA3_1.ASM(在文件夹“ASM_汇编例程”中)实验程序清单如下:STACK1 SEGMENT 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+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 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 ENDSDDATASEGMENTMESDB'The 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 A1MOVSI,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,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 ENDSDDATASEGMENTMESDB'The ascii code of hex are:$'BUFDB0CH,00HDB10H DUP(0)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,OFFSET 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,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 ENDSDDATASEGMENTMESDB'The BCD code of binary are:$'BUFDB01H,07H,03H,04H,05H,01H,06H,08HDB10H DUP(0)DDATAENDSCODE 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,30HMOVDL,AL;显示字符 MOVAH,02HINT21HMOVAL,BLANDAL,0FH;取低4位CMPAL,0AHJBC3ADD AL,07HC3:ADDAL,30HMOVDL,AL;显示字符 MOVAH,02HINT21HPOPDXPOPAXRETENDPCODE ENDS END START实验四 运算类程序实验一、实验目的 (1) 掌握运算类指令编程及调试方法。 (2) 掌握运算类指令对各状态标志位的影响及测试方法。 二、实验内容及说明 80x86 指令系统提供了实现加、减、乘、除运算的基本指令,可对表4-1 所示的数据类型进行算术运算。 表2-4-1 数据类型算术运算表 数制二进制BCD 码带符号无符号 组合非组合运算符、÷、×、÷、×操作数字节、字、多精度字节(二位数字)字节(一位数字)1二进制双精度加法运算 本实验要求计算X+Y=Z ,将结果Z 输出到屏幕,其中X=001565A0H ,Y=0021B79EH。 实验利用累加器AX ,先求低十六位和,并存入低址存储单元,后求高16 位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用ADC 指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF 中的1。在80386 以上微机中可以直接使用32位寄存器和32 位加法指令完成本实验的功能。 2 十进制数的BCD 码减法运算 本实验要求计算X-Y=Z ,其中,X、Y、Z 为BCD 码, X=0400H ,Y=0102H。 3 乘法运算 本实验要求实现十进制数的乘法,被乘数和乘数均以BCD 码形式存放于内存中,被乘数为54320H,乘数为3H,运算结束后,将乘积在屏幕上显示。 4 用减奇数开平方运算 80x86 指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。用减奇数法可求得近似平方根,获得平方根的整数部分。我们知道,N个自然数中的奇数之和等于N2 ,即: 1+3+5=9=32 1+3+5+7=16=42 1+3+5+7+9+11+13+15=64=82 若要做S 的开方运算,那么就可以从S 中逐次减去自然数中的奇数1,3,5,7,一直进行到相减数为0 或不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,它就是S的近似平方根。 本实验要求利用减奇法计算0040H 的开平方值,并将运算结果显示在屏幕上。 三、实验步骤 (1) 运行DVCC32JHP 软件,选择编辑Edit 菜单编写实验程序。 (2) 使用“ASM编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。 (3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。 (4) 更改数据区中的数据,考察程序的正确性。 四、参考程序 1二进制双精度加法运算实验源文件名DVA4_1.ASM(在文件夹“ASM_汇编例程”中)实验程序清单如下:STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 E
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 其他分类


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!