北理工_汇编_实验二_算术运算类操作实验
实验二 算术运算

汇编语言实验报告(二)班级: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的内部中断。
北京理工大学汇编实验二报告

北京理工大学汇编实验二报告本科实验报告实验名称:算术运算类操作实验课程名称:CPU与汇编实验实验时间:2015.10.29 任课教师:王耀威实验地点:10-102实验教师:潘丽敏实验类型:□原理验证■综合设计□自主创新学生姓名:王晓玥学号/班级:1120131332/05111311 组号:学院:信息与电子学院同组搭档:专业:信息工程成绩:一、实验要求和目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。
6、掌握 BCD 码调整指令的使用方法二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1、加减法处理指令主要有加法指令 ADD,带进位加法 ADC,减法指令 SUB,带进位减法指令 SBB。
2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令 IDIV,以及符号位从字节扩展到字的指令 CBW 和从字扩展到双字的指令 CWD。
3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的 BCD 码减法调整指令 DAS,非压缩的 BCD 码加法调整指令 AAA,非压缩的 BCD 码减法调整指令 AAS,乘法的非压缩 BCD码调整指令 AAM,除法的非压缩 BCD 码调整指令 AAD。
8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表 1 所示的数据类型进行数据运算。
表 1-2-1 数据类型数据运算表数制二进制BCD码带符号无符号组合非组合运算符+、-、×、÷+、-+、-、×、÷操作数字节、字、多精度字节(二位数字)字节(一位数字)四、实验内容与步骤1、对于两组无符号数,087H 和 034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:(1)实验流程将一组操作数分别用ADD,SUB,MUL,DIV运算(2)实验代码:DATAS SEGMENTBUF1 DB 087HBUF2 DB 034HBUF3 DB 4 DUP(?);此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AX,0MOV SI,AX;两数相加MOV AL,BUF1MOV BL,BUF2ADD AL,BLMOV BUF3[SI],ALMOV AL,0MOV AL,0INC SIMOV BUF3[SI],AL;两数相减MOV AL,BUF1MOV BL,BUF2SUB AL,BLINC SIMOV BUF3[SI],ALMOV AL,0SBB AL,0INC SIMOV BUF3[SI],AL;两数相乘MOV AL,BUF1MOV BL,BUF2MUL BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;两数相除,AL中存放商,AH中存放余数MOV AX,0MOV AL,BUF1MOV BL,BUF2DIV BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START(3)实验结果:1)第一组操作数87H,34H2)第二组操作数0C2H,5FH(4)计算结果计算状态标志表达式结果CF AF ZF OF SF PF 087H+034H 00BB 0 0 0 0 1 1 087H-034H 0053 0 0 0 1 0 1 087H*034H 1B6C 1 0 0 1 0 0 087H/084H 02(1F) 1 0 0 0 0 1 0C2H+05FH 0121 0 0 0 0 0 0 0C2H-O5FH 0063 0 0 1 0 0 1 0C2H*05FH 47FE 0 0 0 0 0 1 0C2H/05FH 02(04) 0 0 0 0 0 0(5)各运算对状态标志位的影响及其意义。
北京理工大学汇编语言实验报告一

汇编语言实验报告实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)班级:05211002姓名:张宁学号:1120102310实验日期:2012.9.7晚6:00~9:00汇编语言实验报告实验一 DOS 环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示。
四、实验内容与步骤1、汇编、链接并调试给出的简单程序,找出程序中的错误。
(一)录入并建立汇编语言源程序文件(ASM 文件)(二)用汇编程序MASM 将ASM 文件汇编成目标程序文件(OBJ 文件)(三)用连接程序LINK 生成可执行程序文件(EXE 文件)(四)程序的调试2、完成程序设计:分类统计字数组data 中正数、负数和零的个数,并分别存入内存字变量Positive、Negative 和Zero 中,数组元素个数保存在其第一个字中。
使用Debug 查看Positive、Negative 和Zero 三个变量的数据。
五、实验过程及结果:实验一:1.输入给出的程序2.运行输入的程序,发现了三处错误:根据错误提示,发现错误为ADDITION后未打冒号,CMP错打为COM。
修改原代码:改为:3.代码编译成功,生成OBJ文件,再生成EXE文件,可成功运行。
4.在原程序代码后添加两行代码,以验证ADDITION的逻辑正确性,改动如下:现实在DA TA1中添加字节型sum ,再将ADDITION的运行结果,从AX送到sum中去。
5.调试发现ADDITION并没用正确运行。
检查语句逻辑性发现,应将JAE改成JB,才能实现累加并终结。
北理工数据结构实验二

《数据结构与算法设计》实验报告——实验二学院:班级:学号:XX:一、实验目的1.通过实验实践、巩固栈的相关操作;2.熟悉VC环境,加强编程、调试的练习;3.用C语言实现栈的抽象数据类型,实现栈的建立、进栈、出栈、取数据等基本操作;4.用C语言实现判断运算符优先级、表达式求值等基本操作;5.理论知识与实际问题相结合,利用上述基本操作实现简单计算器。
二、实验内容1、简单计算器。
请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。
要求:①从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志。
②输入表达式中的数值均为大于等于零的整数。
中间的计算过程如果出现小数也只取整。
例如,输入:4+2*5= 输出:14输入:(4+2)*(2-10)=输出:-48三、程序设计1、概要设计为实现上述程序功能,应用栈存储运算符和操作数,为此需要建立一个抽象数据类型:栈。
(1)、栈的抽象数据类型定义为:ADT Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,3……,n,n≥0}数据关系:R1={ <ai-1,ai>|ai∈D,i=1,2,……,n}基本操作:InitStack(&S)操作结果:创建一个空栈S。
Push(&S, e)初始条件:栈S已存在操作结果:插入运算符e作为新的栈顶元素GetTop(&S)初始条件:栈S已存在且非空操作结果:用e返回寄存运算符栈S的栈顶元素Pop(&S,&e)初始条件:栈S已存在且非空操作结果:删除寄存运算符栈S的栈顶元素Operate(a,theta,b)初始条件:a,b为整数,theta为运算符操作结果:返回a与b运算的结果Precede(d,c)初始条件:d,c为运算符操作结果:若d优先级大于c,返回‘>’;若d优先级小于c,返回‘<’;若d优先级等于c,返回‘=’;EvaluateExpression()初始条件:输入合法的表达式操作结果:返回表达式的值}ADT Stack⑵主程序流程调用EvaluateExpression()函数计算表达式的值,并将结果输出在屏幕上。
北理大学计算机实验基础 实验二 实验报告表答案精编版

实验二实验报告表
实验名称:
学号姓名:班级:实验时间:
实验报告表2-1 数值型数据在计算机中的二进制实验记录表
说明:本实验对计算机内存数据的存放拟定为:①整数用两个字节存储,并负数只考虑原码;②实数用4个字节存储,其中阶码部分占一个字节。
实验报告表2-2 其他进制数据与二进制转化实验记录表
实验报告表2-3 数据的原码、补码和反码表示实验记录表
实验报告表2-4 二进制算术运算实验记录表
实验报告表2-5溢出实验记录表
实验报告表2-6浮点数的小数点浮动实验记录表
实验报考表2-7 表示浮点数的二进制串中阶码位数改变实验记录表。
实验二算术逻辑运算及移位操作微机原理与接口技术

计算内存单元中的这三个数之和,和存放在0013H 单元中,再求出这三个数之积,乘积存放在0014单元中。
试编写完成此功能的汇编语言程序段并上机验证结果(将结果截图)。
MOV BX,0010H MOV [BX],10H MOV [BX+1],04H MOV [BX+2],30H MOV AX,0000H ADD AL,[BX] ADD AL,[BX+1] ADD AL,[BX+2]MOV DS:[0013H],AL MOV AL,[BX]MUL byte ptr [BX+1] MUL byte ptr [BX+2] MOV DS:[0014],AX3.请编写完成下述功能的汇编语言程序段。
上机验证结果,程序运行的最后结果(AX)=?(将结果截图)。
(1) 传送15H 到AL 寄存器;(2) 再将AL 的内容乘以2;(3) 接着传送15H 到BL 寄存器; (4) 最后把AL 的内容乘以BL 的内容。
(1)mov al,15h (2)mov dx,2 mul dx (3)mov bl,15h (4)mul bl实 验 内容 与 实验 结 果4.用移位指令实现将AL寄存器中的无符号数乘以10。
试编写汇编语言程序段,并上机验证结果(将结果截图)。
xor ah,ahshl ax,1mov bx,axshl ax,1shl ax,1add ax,bx5.请编写完成下述功能的汇编语言程序段。
上机验证结果,程序运行后的商=?(将结果截图)。
(1) 传送数据2058H 到DS:1000H 单元中,数据12H 到DS:1002H 单元中; (2) 把DS:1000H 单元中的数据传送到AX 寄存器; (3) 把AX 寄存器的内容算术右移二位;(4) 再把AX 寄存器的内容除以DS:1002H 字节单元中的数; (5) 最后把商存入字节单元DS:1003H 中。
MOV WORD PTR[1000H],2058H MOV BYTE PTR[1002H],12H MOV AX,[1000H] MOV BX,[1002H] SAR AX,1 SAR AX,1 DIV BXMOV [1003H],AX实 验 内容 与 实验 结 果实验内容与实验结果。
汇编实验报告(实验二)

实验二循环与子程序程序设计一、实验目的1)加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序和结构。
5)掌握子程序设计、编制及调试。
6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容3)编制在屏幕上显示九九乘法表的程序。
4)编制在屏幕上显示用*组成的三角形的程序。
6)编写一个递归子程序,计算指数函数Xn的值,其中X,n从键盘输入。
三、程序内容3)data segmentdata endscode segmentassume cs:code;ds:datastart:mov ax,datamov ds,axmov bl,30hmov bh,31hmov cl,blone:add bl,1mov dl,blmov ah,2int 21hmov dl,'*'mov ah,2int 21hmov dl,bhmov ah,2int 21hmov dl,'='mov ah,2int 21hand bl,0fhand bh,0fhmov al,bhimul blmov ah,0hmov ch,0ahidiv chmov dh,ahadd al,30hcmp al,30hjz threetwo:mov dl,almov ah,2hint 21hadd dh,30hmov dl,dhmov ah,2int 21hadd bl,30hadd bh,30hmov dl,20hmov ah,2int 21hcmp bl,bhjl onemov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hmov bl,cladd bh,1hcmp bh,3ahjl onejmp exitthree:mov al,20hjmp twoexit:mov ah,4chint 21hcode endsend start4)code segmentassume cs:code,ds:data,ss:stackstart:mov al,1mov bl,1l:add al,30hmov dl,almov ah,02hint 21hpush ax mov dl,'*' mov ah,02h int 21hpop ax push axadd bl,30h mov dl,bl mov ah,02h int 21hpop ax push ax mov dl,'=' mov ah,02h int 21hpop axsub al,30h sub bl,30h push bx push axmul blcall result mov dl,' ' mov ah,02h int 21hpop axpop bxinc alcmp al,bl jbe lmov dl,0ah mov ah,02h int 21hmov dl,0dh mov ah,02h int 21hcmp bl,8ja kmov al,1inc bljmp lk:mov ah,4ch int 21hresult:mov cx,0 aaaa:mov bx,10mov dx,0div bxpush dxinc cxmov dx,0cmp ax,0jne aaaabbbb:pop bxjmp lastcccc:last:cmp bx,39hja aboveadd bl,30hmov dl,blmov ah,02hint 21hloop bbbbretabove:add bx,37hmov dl,blmov ah,02hint 21hloop bbbbcode endsend start四、实验结果3)4)。
汇编实验报告

汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。
通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,汇编语言编译器为MASM 615。
三、实验内容(一)数据传送与算术运算1、编写程序实现将两个 16 位的整数相加,并将结果存储在指定的内存单元中。
2、实现数据在不同寄存器和内存单元之间的传送。
(二)逻辑运算与移位操作1、对给定的两个字节数据进行逻辑与、或、异或操作,并观察结果。
2、进行移位操作,包括左移和右移,理解移位对数据的影响。
(三)循环与分支结构1、利用循环结构计算 1 到 100 的整数之和。
2、根据给定的条件,使用分支结构实现不同的操作。
(四)子程序调用1、编写一个子程序,实现两个数的乘法运算。
2、在主程序中调用该子程序,并输出结果。
四、实验步骤(一)数据传送与算术运算1、打开 MASM 编译器,新建一个汇编源文件。
2、使用`MOV` 指令进行数据传送,将两个整数分别存储在寄存器`AX` 和`BX` 中。
3、使用`ADD` 指令将两个数相加,结果存储在`CX` 寄存器中。
4、最后,使用`MOV` 指令将结果存储到指定的内存单元。
(二)逻辑运算与移位操作1、在源文件中定义两个字节变量,并初始化其值。
2、使用逻辑运算指令(如`AND`、`OR`、`XOR`)对这两个变量进行操作。
3、使用移位指令(如`SHL`、`SHR`)对变量进行移位,并观察结果。
(三)循环与分支结构1、对于循环结构,使用`LOOP` 指令实现从 1 到 100 的累加。
2、在分支结构中,根据给定的条件(如比较两个数的大小),使用`JZ`、`JL` 等指令执行不同的分支操作。
(四)子程序调用1、定义一个子程序,使用参数传递的方式接收两个数,并进行乘法运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科实验报告实验名称:实验二算术运算类操作实验(基础与设计)课程名称:CPU与汇编实验实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:无学院:信息与电子同组搭档:无专业:信息工程成绩:一、实验要求和目的1.了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2.掌握各类运算类指令对各状态标志位的影响及测试方法;3.熟悉汇编语言二进制多字节加减法基本指令的使用方法;4.熟悉无符号数和有符号数乘法和除法指令的使用;5.掌握符号位扩展指令的使用;6.掌握BCD 码调整指令的使用方法。
二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1.加减法处理指令2.乘除法指令和符号位扩展指令3.BCD 码的调整指令四、实验内容(一)对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:1.流程图Array2.程序代码:DA TAS SEGMENTDA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AX,0C2HMOV BX,5FHADD AX,BX ;addMOV AX,0C2HMOV BX,5FHSUB AX,BX ;subMOV AX,0C2HMOV BX,5FHMUL BX ;mulMOV AX,0C2HMOV BX,5FHDIV BX ;divMOV AH,4CHINT 21HCODES ENDSEND START(将数据改变得到另一组输出结果)3.实验结果以第一组数的加法为例(已将截图以上输入-t进行debug的步骤省略)此时右下角信息(NV UP……)代表标志寄存器的值。
4.结果分析:由资料可得:1.CF(carry flag):进位标志位,运算结果需要进位为1,不需进位为02.PF(parity flag):奇偶标志位,当运算结果的低8位中的“1”的个数为偶数时PF=1,为奇数时,PF=0。
3.AF(auxiliary flag):辅助进位标志,第3位有进位为1,无进位为04.ZF(zero flag):零标志位,当运算结果为零时ZF=1,否则ZF=0。
5.SF(sign flag):符号标志位,当运算结果的最高位为1时SF=1,否则SF=0。
6.OF(overflow flag):溢出标志位,当算术运算结果超出了带符号数的范围,即溢出时,OF=1,否则OF=0.其中注意在本程序中,SUB影响全部的条件标志:1.减法的CF反应的是无符号数运算中的借位情况:当减数>被减数是CF=1,否则CF=0;2.OF:如果两个数的符号相反而结果的符号与减数相同,则OF=1,否则OF=0;3.SF(运算结果<0为1否则为0)、ZF(零标志)、AF(辅助进位标志)、PF(奇偶标志)根据其含义设置。
(二)在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。
试编程实现上述运算。
FIRST DW 45H,82H,96H,57H1.流程图十六进制减法及十进制显示部分略。
十进制加法前设置寄存器值为SI=0,DI=0,CX=3,在每步相加后用DAA显示为十进制数,十进制加法前设置寄存器值为SI=0,DI=5,CX=3,在每步相减后用DAS显示为十进制数。
2.程序代码:DA TAS SEGMENTFIRST DB 45H,82H,96H,57HSECOND DB 12H,46H,83H,45HTHIRD DB 10 DUP(?) ;注意保证数组空间足够大FORTH DB 10 DUP(?)DA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV SI,0MOV DI,0MOV CX,3 ;设置寄存器值,作为计数器L1: ;十六进制显示加法MOV AL,FIRST[SI+3]MOV BL,ALMOV AL,SECOND[SI+3]ADC AL,BLMOV THIRD[DI+4],ALDEC SIDEC DIDEC CXJNZ L1 ;若CX不为零,则未到最高位,循环DEC DI ;CX为零,跳出循环MOV AL,FIRST[SI+3]CBW ;扩充,符号位存入AHMOV BX,AXMOV AL,SECOND[SI+3]CBWADC AX,BXMOV WORD PTR THIRD[DI+4],AX ;将AX强制显示。
即高位存入下一位。
MOV DI,5 ;重置寄存器值,避开加法结果位置。
MOV SI,0MOV CX,3L2: ;十六进制显示减法MOV AL,FIRST[SI+3]MOV BL,SECOND[SI+3]SBB AL,BLMOV THIRD[DI+4],ALDEC SIDEC DIDEC CXJNZ L2DEC DIMOV AL,FIRST[SI+3]CBWMOV BL,SECOND[SI+3]CBWSBB AX,BXMOV WORD PTR THIRD[DI+4],AXMOV DI,0MOV SI,0MOV CX,3L3: ;十进制显示加法MOV AL,FIRST[SI+3]MOV BL,ALMOV AL,SECOND[SI+3]ADC AL,BLDAA;显示为十进制MOV FORTH[DI+4],ALDEC SIDEC DIDEC CXJNZ L3DEC DIMOV AL,FIRST[SI+3]CBWMOV BX,AXMOV AL,SECOND[SI+3]CBWADC AX,BXDAAMOV WORD PTR FORTH[DI+4],AXMOV DI,5MOV SI,0MOV CX,3L4: ;十进制显示减法MOV AL,FIRST[SI+3]MOV BL,SECOND[SI+3]SBB AL,BLDASMOV FORTH[DI+4],ALDEC SIDEC DIDEC CXJNZ L4DEC DIMOV AL,FIRST[SI+3]CBWMOV BL,SECOND[SI+3]CBWSBB AX,BXDASMOV WORD PTR FORTH[DI+4],AXMOV AH,4CHINT 21HCODES ENDSEND START3.调试结果4.结果分析(1)CWB为扩充,符号位置于AH;(2)将AX放入THIRD中时,由于AX为WORD型,THIRD为BYTE型,故需要PTR 指令;(3)最高位相加时,将进位结果强制存入数组,结果如图显示,第二位00为最高位进位结果。
(三)编程计算((Z +X*Y -328) -V)/ Y,其中X、Y、Z、V 均为16 位带符号数,假设初始数据分别装入X、Y、Z、V 单元,要求上式计算结果的商存入AX,余数存入DX 寄存器。
同学自行给出初始值加以验证程序。
1.流程图2.程序代码DA TAS SEGMENTX DW 0FF3HY DW 1117HZ DW 000FHV DW 5B12HDA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,XIMUL Y ;x*y,保存在DX,AX中MOV CX,AXMOV BX,DX ;此时DX,AX存入BX,DX中MOV AX,Z ;扩展,存入AXCWDADD CX,AXADC BX,DXSUB CX,328SBB BX,0MOV AX,VCWDSUB CX,AXSBB BX,DXIDIV YMOV AH,4CHINT 21HCODES ENDSEND START3.调试结果经检验结果正确4.结果分析需注意数据计算可能产生的进位,及时使用CWB扩充,保证结果正确。
五.总结通过这次实验,自己对汇编语言终于有了一个系统的认识,并初步理解了汇编中四则运算的机制,熟悉了课上所学的CBW, CWD, PTR, IMUL, IDIV, DAA, DAS等命令的使用。
。