1、北京理工大学汇编实验报告2北京理工尢爭Heijina Institute of Technology本科实验报告实验名称:实验二 算术运算实验课程名称:课程设计I (CPU与汇编)(实验)实验时间:第5-20周周五下午任课教师:聂青实验地点:10-102实验教师:苏京霞实验类型:0原理验证 综合设计 自主创新学生姓名:罗逸雨学号1120141208 05211401组 号:3学 院:信息与电子学院同组搭档:专 业:通信工程成 绩:信息与电子学院SCHOOL OF INFORMATION AND ELECTRONICS1/1一、实验目的1) 掌握MASM for Windows环境下的汇编语言编
2、程环境使用;2) 掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进 制、BCD码的表示形式;3) 掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态 标志位的影响及测试方法;4) 掌握无符号数和有符号数运算区别及编程方法;二、实验环境与原理1.实验软硬件环境1) 硬件环境:惠普64位一体化计算机及局域网;2) 软件环境:Windows 8,红蜘蛛管理系统,MASM for Windowso2.实验原理算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。1)标志位在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表 参照表1所示
3、。表1标志名和状态符号的对照表参照表标志名置位复位溢出标志OF(是/否)0VNV方向标志DF(减/増)DNUP中断标志IF(允许/禁止)EIDI符号标志SF(负/正)NGPL零标志ZF(是/否)ZRNZ辅助进位标志AF(是/否)ACNAPEPO进位标志CF(是/否)CYNC2) 加减法指令ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进 位减法指令。3) 乘除法指令MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除 法指令,IDIV表示带符号数除法指令。4) 符号位扩展指令CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令
4、。1/15) BCD码的调整指令在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD 码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD 码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在 AL中。组合的BCD码加法调整指令DAA;组合的BCD码减法调整指令DAS;非组合的BCD码加法调整指令AAA;非组合的BCD码减法调整指令AAS; 乘法的非组合BCD码调整指令AAM; 除法的非组合BCD码调整指令AADo8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。表2表数据类型的数据运算表数制二进制B
5、CD码带符号无符号组合非组合运算符+、一、X、-T+、一卜、一、X、4操作数字节、字、多精度.1.二位数字)三、实验步骤1)试编程以下各组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的 影响:计算状态标志算式结果AFZFOFSFPF0ABH+78HOABH -78H64H+5AH64H-5AH0A2H*3FH0A2H3FH总结各运算对状态标志位的影响,及其意义匚2)在数据段定义了两个多精度的有符号16进制数,BUF1和BUF2o求两数的和 与差,并将计算值存放在BUF3为首地址的缓冲区中;同时将两组数据当作十进 制数据来处理,再次求两数的和与差,并将结果存放在BUF3为首地址的缓冲区
6、中。试编程实现上述运算。1/1BUF1 DB 92H, 98H, 45H, 64H, 78HBUF2 DB 33H, 46H, 17H, 45H, 52H16进制结果10进制结果BUF1-BUF2BUF1 -BUF23)编程计算283584/ 190,运算结果用十六进制表示。要求上式讣算结果的商 存入AX,余数存入DX寄存器。四、程序清单与框图(1) 程序: CODES SEGMENTASSUME CS:CODESSTART:MOV AX, OABHMOV BX, 78HADD AX, BX ; 0ABH+078HMOV AX, OABHMOV BX, 78HSUB AX, BX; 0ABH-
7、078HMOV AX, 61HADD AX, 5AH; 61H+5AHMOV AX, 64HSUB AX, 5AH; 61H-5AHMOV AL, 0A2HMOV BL,3FHMUL BL ; 0A2H*3FHMOV AX, 0A2HMOV BL,3FHDIV BL ; 0A2H/3FHMOV AH, 4CHINT 21HCODES ENDSEND START1/1(2)程序:1.十六进制求和DATAS SEGMENTBUF1 DB 92H, 98H, 45H, 64H, 78HBUF2 DB 33H, 46H, 17H, 45H, 52HBUF3 DB 6 DUP(?);最高位符号位扩展后占
8、一个字,共6个字节A DW OHDATAS ENDSCODES SEGMENTASSUME CS:CODES, DS:DATASSTART:MOV AX, DATASMOV DS, AXLEA SI,BUF1LEA DI,BUF2LEA BX, BUF3CLC ;进位清空MOV CX, 4L:MOV AL, SIADC AL, DIMOV BX, ALINC SIINC DIINC BX ;BX自增,指向下一个字节单元DEC CXJNZ LMOV AL, byte ptrSIjCBW ;符号扩展MOV DX, AXMOV AL, byte ptrDICBW ;符号扩展ADC AX, DXMOV
9、 word ptrBX, AXMOV AH, 4CHINT 21HCODES ENDSEND START1/1框图:开始程序功能:通过循环分别求得BUF1、BUF2中低四位字节的和,并存在BUF3对应 字节单元中。值得注意的是有符号数相加时需要对最高位字节先进行符号扩展, 所以BUF1、BUF2的高位字节的和需要放在循环外单独计算,最后将高位单元的 字型的和存储在BUF3中。十六进制减法程序同理。组合BCD码加减法在最后需 要进行DAA/DAS调整。1/12.十六进制作差DATAS SEGMENTBUF1 DB 92H, 98H, 45H, 64H, 78HBUF2 DB 33H, 46H,
10、17H, 45H, 52HBUF3 DB 6 DUP(?)DATAS ENDSCODES SEGMENTASSUME CS:CODES, DS:DATASSTART:MOV AX, DATASMOV DS, AXLEA SI,BUF1LEA DI,BUF2LEA BX, BUF3CLCMOV CX, 4L:MOV AL, SISBB AL, DIMOV BX, ALINC SIINC DIINC BXDEC CXJNZ LMOV AL, byte ptrSlCBW ;符号扩展MOV DX, AXMOV AL, byte ptrDICBW ;符号扩展SBB DX,AXMOV word ptrBX
11、, DXMOV AH, 4CHINT 21HCODES ENDSEND START3.十进制求和DATAS SEGMENTBUF1 DB 92H, 98H, 45H, 64H, 78HBUF2 DB 33H, 46H, 17H, 45H, 52HBUF3 DB 6 DUP(?)DATAS ENDSCODES SEGMENT1/1ASSUME CS:CODES, DS:DATASSTART:MOV AX, DATASMOV DS, AXLEA SI,BUF1LEA DI,BUF2LEA BX, BUF3CLCMOV CX, 5L:MOV AL, SIADC AL, DIDAAMOV BX, AL
12、INC DIINC SIINC BXDEC CXJNZ LMOV AL,0ADC AL,0 ;存最高位进位DAAMOV byte ptrBX,ALMOV AH, 4CHINT 21HCODES ENDSEND START4.十进制作差DATAS SEGMENTBUF1 DB 92H, 98H, 45H, 64H, 78HBUF2 DB 33H, 46H, 17H, 45H, 52HBUF3 DB 6 DUP(?)DATAS ENDSCODES SEGMENTASSUME CS:CODES, DS:DATASSTART:MOV AX, DATASMOV DS, AXLEA SI,BUF1LEA
13、DI, BUF2LEA BX, BUF3CLCMOV CX, 51/1L:MOV AL, SISBB AL, DIDASMOV BX, ALINC DIINC SIINC BXDEC CXJNZ LMOV AL,0SBB AL,0DASMOV byte ptrBX,ALMOV AH, 4CHINT 21HCODES ENDSEND START(3)程序:CODES SEGMENTASSUME CS:CODESMOV AX, 280MOV BX, 584MUL BXMOV BX, 190DIV BXMOV AH, 4CHINT 21HCODES ENDSEND五、实验结果与分析(1)计算状态标志
14、算式结果AFCFZFOFSFPF0ABH+78H123HACNCNZNVPLPO0ABH-78H33HNANCNZNVPLPE64H+5AHBEHNANCNZNVPLPE64H-5AH0AHACNCNZNVPLPE0A2H*3FH27DEACCYNZovPLPE0A2H/3FH商02 余数42ACCYNZovPLPE1/1无符号数运算标志位意义总结:状态 标志 位加法减法乘法除法01010101CF最高位 无进位最高位 有进位最高位 无借位最高位 有借位CF=OF=O乘积的 高一半 为0 (字 节操作 的(AH) 或字操 作的(DX)CF二OF二1 乘积的 高一半 不为0无 定 义AF低四位
15、向髙四 位无进 位低四位 向髙四 位进位低四位 向髙四 位无进 位低四位 向髙四 位进位无影响无影响ZF结果不为0结果为0结果不为0结果为0无影响无影响OF无溢岀两个同 符号数 相加,结 果符号 与其相 反,发生 溢岀。无溢出两数符 号相反, 而结果 符号与 减数相 同,发生 溢出。CF=OF=O 乘积的 高一半 为0 (字 节操作 的(AH) 或字操 作的(DX)CF 二 OF 二 1 乘积的 高一半 不为0SF最高位为0最高位 为1最高位为0最髙位为1无影响无影响PF1的个数 为奇数个1的个数 为偶数个1的个数 为奇数个1的个数 为偶数无影响无影响DEBUG运行结果截图:0ABH+078H
16、二0123HAX=01Z3 BX=O078DS=Q?60 ES=O?600770:0008 BGABCX=O0Z?DX=O0OO SP=OO00SS=076F CS=O?70 IP二0008MOU AL,AB1/1BP=000O SI=00eO DI=O00ONU UP El PL NZ AC PO NC0ABH-78H二0033H椒二 0033 BX=OO78DS=0?60 ES=O76O3770:0010 B8640OCX=G02D DX=OO00 SP 二 QOG0SS=O76F CS=07?0 IF 二 003MOU AX, 0064BP二0000 SI二0000 DI二0000MU
17、UP El PL MZ MA PE MC64H+5AH=BEHX 二 QBE BX=O078S=O760 ES=07&0)770:0016 B8&4O0CX二O0ZD DX二0000 SP=OG0SS=076F CS=0?7O IP=0G16MOU AX.0064BP二000 SI二0000 DI二000MU UP El PL NZ NA PE NC64H-5AH=0AHAX二0O0A BX=O076DS=0760 ES=O76097?O:0O1C B0A2CX二00ZD DX二000 SF二0000SS=076F CS=0770 IP=0O1CMOU AL,A2HP二000 SI二0000
18、DI二000MU UP El PL NZ AC PE NC02AH*3FH二27DEAX=Z?DE BX=O03FDS=0760 ES=O?600770:00ZZ B8AZ00CX=O0ZD DX二0OO0 SP二0000SS=0?6F CS=O770 IF=00ZZMDU AX,00AZBP=0OOG SI二GOOO DI二OOOOOU UP El FL MZ AC PE CY0A2H/3FH=商 02 余数 42我二 Z40Z BX 二 003F CX=OOZD DX= DS=0760 ES=O76O3770:0029 B44C0000 SP=O00SS=O76F CS=077O IP=0
19、0Z9rtOU AH,4CBP 二 MW SI 二 0000 DI 二 0000OU UP El PL NZ AC PE CY(2)BUF1、BUF2均为有符号数BUFl DB 92H, 98H, 45H, 64H, 78HBUF2 DB 33H, 46H, 17H, 45H, 52H16进制结果10进制结果BUF1+BUF2C5 DE 5C A9 CA 0025 45 63 09 31 01BUF1-BUF25F 52 2E IF 26 0059 52 28 19 26 00经过计算验证,运行结果均正确。DEBUG运行结果截图:1 十六进制数求和-d ds:00770:00000770:00
20、100770:00200770:00300770:00400770:00500770:00600770:0070WWHLJDWWW 9D34)0)0 E0I84B000 FGCIu2.十六进制数作差1/10770:000092984564?8 3346 17-45525F52ZEIFZ60G0770:0010B870078ED8 8D36 00-008D3E05008DIE0A0770:002000F8B90400 8A04 1A-0588G?464?4349750770:0030F48A04988B DO8A 05-98IBDO8917B44CCD0?0:0O4OZ100000000 000
21、0 00-0000GO00000000000?0:005O0000000000 0000 00-0000GO00000000000?0:00600000000000 0000 00-0000GO00000000000?0:0O700000000000 0000 00-0000GO0000000000-d ds:OEdx3FER_R&p6 FGCIu L.3.十进制求和-d ds:O0?7O:OOGO9845783346l?-450770:001070 07D88D3600-000770:0020F8B9008A0512-040?0:0030F3BO1400 2788 070770:004000
22、0000000000-000770:0050000000000000-00O?O:006O000000000000-000770:0070000000000000-00522563093101.Edx3F.ERzEc.l.8D3E008DIEOAU.6278847464349GFCIB44C21000000u 9 . . .L.00000000000000000000000000000000OO000000000000004.十进制作差Edx3F.ERYR(.&p6 /.GFC1 u /L?於刁)0)0)0)0 CD CD 今 CD CD o o o 261E幻0000000000 9Db)0
23、)0)0)0)0 18 40(0(o(0(o( 2aqz0(o(0(o( 5&0cao(0(0( 9ESC)O)0)0 53CO40I0I0I0I ZDF4)O)O)O 58ZBa0(0(0( 5)5)7)0)o)o)o 4A CDoCD CD o CD CD 66HF)O)O)O 430z0(o(0(0( 388o(o(o(0(0( 88c 7DO1OOOO 4Efo)0)0)0)0 68000000 5)?yo)o)0)o)o 4OBB0(O(0(O( 97FFOOOO Z8)o5)o)0)o)o-d ds:O 0779:0000 0779:0010 0779:OOZO 0770:0030
24、 0770:0040 0770:0050 0770:0060 0770:0070(3)280*584/190 商:035CH 余数:0078HDEBUG运行结果截图:ftX=Q35C BX=GOBE CX=OO11 DX=OO?8 SP=OQGO DS=Q760 ES=G760 SS=0?BF CS=O?G IP=OQGD D?O:Q00D B44C MOUBP=GO0OSI=O0O0 DI=O0OGOU UP El PL NZ NA PO CYAH.4CAX=035C, DX二0078 经验算后证明结果正确。六、实验感想经过本次实验,我对汇编语言中的二进制、十六进制、十进制、BCD码的表 示
25、形式有了一定了解,对有关BCD码调整指令方面的知识有了更深刻的认识,熟 悉了二进制多字节加减法基本指令的使用方法以及无符号数和有符号数乘法和 除法指令的使用,通过分析和思考,掌握了各类运算类指令对各状态标志位的影 响和测试方法,以及无符号数和有符号数运算区别及编程方法。在编第二小题的程序时,开始时我忽略了给出的有符号数这个条件,使用了 无符号数的方法进行编程,后来老师指出了这个问题。经过更正这个错误,尝试 了无符号数和有符号数的不同的编程方式,我对无符号数和有符号数运算的区别 及编程方法有了更加深刻的认识。在课堂上学的知识只给我留下了较浅的印象, 只有通过自己动手编程才能有效巩固所学的知识。1/1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1