收藏 分销(赏)

实验二--算术运算.docx

上传人:仙人****88 文档编号:9397203 上传时间:2025-03-24 格式:DOCX 页数:9 大小:42.05KB
下载 相关 举报
实验二--算术运算.docx_第1页
第1页 / 共9页
实验二--算术运算.docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述
实验二 算术运算 汇编语言实验报告 (二) 班 级:01540802班 姓 名: 南 征 学 号: 20080705 信息与电子学院 实验二 算术运算 一、 实验目的 熟悉利用汇编语言对多精度十六进制和十进制的编程方法,弄清带符号数及不带符号数的运算区别,理解各状态标志位的含义,以及运算结果对各状态标志的影响,掌握无符号数的乘除法运算并保证运算结果不溢出。 二、 实验要点 对汇编语言的算术运算要分清是有符号的运算还是无符号的运算,当对无符号数进行加减时,要考虑进位CF,对于有符号数进行加减时,要考虑运算结果是否溢出。为防止溢出,常将操作数利用CBW或CWD指令进行符号扩展后再进行加减运算。对于多精度的加减运算时,对高位字节或字的加减法要分别采用ADC和DBB;对低位字节或字采用不带进位的加减指令ADD和SUB;在利用循环计算多字节的加减法时,可以用CLC指令将CF初始化为0,然后在循环体内统一使用带进位(或借位)的加减法指令。 在汇编语言进行十进制的加减运算时,首先需将操作数用BCD码示,并且要考虑操作数是用组合的BCD码还是用一个字节表示一个十进制数。对于组合的BCD码加减法,其结果应放在AL寄存器中,再用DAA和DAS指令进行二——十进制调整。二对于未组合的BCD码加减法,用AAA和AAS对结果进行二——十进制调整。此外在进行十进制数减法时,要考虑用大数减小数,因为十进制数运算不能用补码表示。 对于有符号数惩罚要用IMUL指令,对无符号数乘法要用MUL指令。字乘时AX为约定的一个乘数,其积在DX:AX中;字节相乘时AL为约定的一个乘数,其积在AX中。乘法指令中的操作数,不得为立即数,可以为通用寄存器或存储器操作数。 对于除法要用IDIV、DIV分别对有符号数和无符号数进行除法运算。字除法时被除数约定在DX:AX中;字节相除时,被除数约定在AX中,除法指令中的操作数可以为通用寄存器或者存储器操作数,但不得是立即数。在进行除法运算时要考虑除数是否为零,以及其商是否溢出,在出现除零溢出时,将产生类型号为0的内部中断。 三、 实验任务及步骤 1. 在数据段中一缓冲区内存放有无符号数0ABH和78H,64H和54H;试编程求这两组数的和、差,并将结果填入表格: 代码如下: DATA SEGMENT DATA1 DB 0ABH, 64H DATA2 DB 78H, 5AH COUNT EQU $-DATA2 DATA3 DW 6 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA MAIN PROC FAR START: MOV AX, DATA MOV DS, AX MOV ES, AX LEA SI, DATA1 LEA DI, DATA2 LEA BX, DATA3 MOV CX, COUNT AGAIN1: XOR AH, AH MOV AL, [SI] ADC AL, [DI] ADC AH, 0 MOV [BX], AX INC SI INC DI INC BX INC BX DEC CX JNZ AGAIN1 LEA SI, data1 LEA DI, data2 MOV CX, COUNT CLC AGAIN2: MOV AL, [SI] SBB AL, [DI] MOV [BX], AL INC SI INC DI INC BX DEC CX JNZ AGAIN2 MOV AH, 4CH INT 21H MAIN ENDP CODE ENDS END START 运行结果如下: 0B3E:0000 AB 64 78 5A 23 01 BE 00-33 0A 00 00 00 00 00 00 0B3E:0010 B8 3E 0B 8E D8 8E C0 8D-36 00 00 8D 3E 02 00 8D 0B3E:0020 1E 04 00 B9 02 00 32 E4-8A 04 12 05 80 D4 00 89 0B3E:0030 07 46 47 43 43 49 75 EE-8D 36 00 00 8D 3E 02 00 0B3E:0040 B9 02 00 F8 8A 04 1A 05-88 07 46 47 43 49 75 F3 0B3E:0050 B4 4C CD 21 06 4E 91 00-00 2E C7 06 1A 92 5B 5D 0B3E:0060 2E C7 06 1C 92 7C 3C 2E-C7 06 1E 92 3E 2B 2E C7 0B3E:0070 06 20 92 3D 3B E8 83 09-73 13 B8 FF FF 53 26 8B 计算 状态标志 算式 结果 AF CF OF PF SF ZF 0ABH+78H 0123 AC NC NV PO PL NZ 0ABH-78H 0033 NA NC NV PE PL NZ 64H+5AH 00BE NA NC NV PE PL NZ 64H-5AH 000A AC NC NV PE PL NZ 2. 在数据缓冲区BUF内存放有10个学生的数学成绩,78、86、95、67、56、80、92、68、77、88,试编程求总分和平均分,并分别存入SUM字单元和AVERAGE字节单元。 代码如下: DATA SEGMENT BUF1 DB 78H,86H,95H,67H,56H,80H,92H,68H,77H,88H SUM DW 0 AVERAGE DW 0 DATA ENDS STACK SEGMENT DB 256 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK MAIN PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV ES, AX MOV SI, OFFSET BUF1 MOV DI, OFFSET SUM MOV CX, 9H MOV AX, 0078H INC SI NEXT: MOV BL, [SI] ADD AL, BL DAA ADC AH, 0 INC SI DEC CX MOV [DI], AX JNZ NEXT MOV [DI], AX MOV BX, 10H DIV BX MOV [DI+2], AX MOV [DI+4], DX MOV AH, 4CH INT 21H RET MAIN ENDP CODE ENDS END MAIN 运行结果如下: 0B3E:0000 78 86 95 67 56 80 92 68-77 88 87 07 78 00 07 00 0B3E:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 3. 多字加减法 在数据段中有两个缓冲区,存放数据如下: BUF1 DB 12H 98H 45H 64H 78H BUF2 DB 33H 46H 17H 45H 52H 编写一源程序,将BUF1和BUF2中的十六进制数,按下列要求计算,并将结果填入下表: 代码如下: DATA SEGMENT BUF1 DB 82H,98H,45H,64H,78H BUF2 DB 33H,46H,17H,45H,52H COUNT EQU $-BUF2 SUM DB 38 DUP(0) DATA ENDS STACK SEGMENT DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BUF1 LEA BX,BUF2 LEA DI,SUM MOV CX,COUNT ADD SI,COUNT-1 ADD BX,COUNT-1 ADD DI,37 CLC STD A1: LODSB ADC AL,[BX] DAA STOSB DEC BX LOOP A1 ADC BYTE PTR[DI],0 DEC DI LEA SI,BUF1+COUNT-1 LEA BX,BUF2+COUNT-1 MOV CX,COUNT CLC STD A2: LODSB ADC AL,[BX] STOSB DEC BX LOOP A2 ADC BYTE PTR[DI],0 DEC DI LEA SI,BUF1+COUNT-1 LEA BX,BUF2+COUNT-1 MOV CX,COUNT-1 CLC STD A3: LODSB ADC AL,[BX] STOSB DEC BX LOOP A3 MOV AL,[SI] CBW MOV CL,[BX] CBW ADD AX,CX MOV [DI],AL MOV[DI-1],AH DEC DI DEC DI LEA SI,BUF1+COUNT-1 LEA BX,BUF2+COUNT-1 MOV CX,COUNT CLC STD S1: LODSB SBB AL,[BX] DAS STOSB DEC BX LOOP S1 DEC DI LEA SI,BUF1+COUNT-1 LEA BX,BUF2+COUNT-1 MOV CX,COUNT CLC STD S2: LODSB SBB AL,[BX] STOSB DEC BX LOOP S2 DEC DI LEA SI,BUF1+COUNT-1 LEA BX,BUF2+COUNT-1 MOV CX,COUNT-1 CLC STD S3: LODSB SBB AL,[BX] STOSB DEC BX LOOP S3 MOV AL,[SI] CBW MOV CL,[BX] CBW SUB AX,CX MOV [DI],AL MOV[DI-1],AH MOV AH,4CH INT 21H MAIN ENDP CODE ENDS END MAIN 运行结果如下: 0B3E:0000 82 98 45 64 78 33 46 17-45 52 00 00 FF 4F 52 2E 0B3E:0010 1F 26 00 4F 52 2E 1F 26-00 49 52 28 19 26 FF B5 0B3E:0020 DE 5C A9 CA 00 B5 DE 5C-A9 CA 01 16 44 63 10 30 0B3E:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B3E:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 无符号结果 有符号结果 十进制结果 BUF1+BUF2 00B5DE5CA9CA FF4F522E1F26 011644631030 BUF1-BUF2 004F522E1F26 FF B5DE5CA9CA 004952281926 4. 计算280H*584H/190H,运算的结果用十六进制表示。 RESULT = 08D3 + 0050 代码如下: DATA SEGMENT DATA1 DW 280H, 584H, 190H DATA2 DW 1 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, ES: DATA MAIN PROC FAR START: MOV AX, DATA MOV DS, AX MOV ES, AX LEA BX, DATA1 MOV DX, 0000H MOV AX, [BX] INC BX INC BX MUL WORD PTR [BX] INC BX INC BX DIV WORD PTR [BX] LEA BX, DATA2 MOV [BX], AX INC BX INC BX MOV [BX], DX MOV AH, 4CH INT 21H MAIN ENDP CODE ENDS END START 运行结果如下: 0B3E:0000 80 02 84 05 90 01 D3 08-50 00 00 00 00 00 00 00 0B3E:0010 B8 3E 0B 8E D8 8E C0 8D-1E 00 00 BA 00 00 8B 07 0B3E:0020 43 43 F7 27 43 43 F7 37-8D 1E 06 00 89 07 43 43 0B3E:0030 89 17 B4 4C CD 21 26 E1-91 2E 89 36 E3 91 FC 2E 0B3E:0040 89 0E 48 91 2E C7 06 4A-91 00 00 2E C7 06 5D 91 0B3E:0050 00 00 2E C7 06 4E 91 00-00 2E C7 06 1A 92 5B 5D 0B3E:0060 2E C7 06 1C 92 7C 3C 2E-C7 06 1E 92 3E 2B 2E C7 0B3E:0070 06 20 92 3D 3B E8 83 09-73 13 B8 FF FF 53 26 8B 四、 实验心得 通过本次实验基本掌握了运用汇编语言进行加、减、乘、除算术运算的方法,在实验过程中遇到了关于进位标志和辅助进位标志等状态标志的一些问题,解决这些问题使笔者加深了对状态标的理解。实验中还进行了十进制转换以及类型转换等操作,对这些操作也有了全新的理解和认识。本次实验还涉及到了一些循环结构,这也是今后在运用汇编语言进行程序编写过程中最为常用的一种结构。 8
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服