合工大汇编语言程序设计实验报告
- 格式:doc
- 大小:484.50 KB
- 文档页数:28
合肥工业大学实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一. 实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二. 实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三. 实验过程和程序基础题:1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
附加题:1. 从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x2. 完成BX中1的个数的统计。
3. 用串操作指令将DS:0000开始20个字节初始化为:0CCH。
并将这20个字节的内容复制到其后的20个字节里。
四. 实验结果(包括必要的截图)基础题 1:基础题 2:附加题 1:附加题 2:附加题 3:五. 实验体会1. 在汇编语言中,变量的其实都是地址。
2. 在Debug中,数值都是16进制的。
3. 在读写内存中的数据时,必须指出数据类型是byte还是word。
《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。
实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。
汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。
本实验通过编写汇编语言程序,加深对汇编语言的理解。
二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。
2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。
3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。
b.设置段寄存器,将数据段地址加载到DS寄存器中。
c.设置显示模式和光标位置。
d.将字符串逐个字符输出到屏幕上。
e.关闭显示模式。
4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。
5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。
三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。
通过程序分析和调试过程,加深了对汇编语言的理解和掌握。
四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。
通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。
同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。
在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。
总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。
《汇编语言程序设计》实验报告班级:090342B学号:*********姓名:***指导教师:***实验日期:实验一实验题目Debug基本命令使用完成日期2011,3,29实验二实验题目汇编语言程序的上机过程完成日期2011,4,16实验三实验题目顺序程序设计完成日期2011,4,19实验四实验题目分支程序设计完成日期2011,4,28START:MOV AX,DATAMOV DS,AXMOV BX,BUFMOV CL,0COPA: AND BX,BXJE EXITSHL BX,1JNC COPAINC CLJMP COPAEXIT: MOV COUNT,CLMOV AH,4CHINT 21HCODE ENDSEND START四、实验结果(可以抓图粘贴)1.两数均为奇数时两数均为偶数时两数一奇一偶时2.3.4.五、本次上机的体会或收获在分支程序的编写过程中,最重要的是判断指令的选择和各部分程序段的逻辑顺序,其次是各种指令以及寻址方式的熟练运用。
这次实验反应出的问题有程序分支后不能汇合到应在的点,主要是因为考虑不周;还有由于自己的不经意,写错指令导致程序不能正常运行;此外,本次上机还让我体会到了程序验证的重要性,比如第一个程序的调试,由于没有调试所有可能出现的情况,导致在我誊写报告的时候出现了错误结果,后经改正才使得程序准确运行。
实验五实验题目循环程序设计完成日期2011,5,3end start四、实验结果(可以抓图粘贴)1.2.3.(1)字符串相等(2)字符串不相等4.5.六、本次上机的体会或收获通过本次实验,基本掌握了串操作指令的使用方法,同时对循环程序的多种设计有了进一步的了解和掌握。
在循环程序设计中,最重要的是对循环次数和循环终止条件的设置,只有二者得以正确设置,程序才能正确运行。
除此,程序书写时一定要注意固定部分的书写,确保固定语句的搭配无误。
实验六实验题目DOS中断调用程序设计完成日期2011,5,13四、实验结果(可以抓图粘贴)1.2.3.五、本次上机的体会或收获本次实验主要是对1号、2号、9号DOS功能的调用,通过实验加深了对中断功能调用的理解,但对于各功能连用时的操作还存在疑惑,尤其是该实验的第二题,程序的输出结果总会带有一些不相关的字符串。
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。
然后在显示器输出排好序的数据, 中间用’,’隔开。
2.输出数据使用子程序方式。
算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。
(5)循环进入子程序, 输出原始数据。
(6)在子程序内循环输出每一位的十进制数字。
(7)主程序进行内外循环, 进行冒泡排序。
(8)再一次调用子程序输出排序后的结果。
调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。
所以前面必须加上MOV DX,OFFSET NOTE1。
(4)汇编语言是不会再输出汉字的。
(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。
调试结果:。
汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。
2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。
4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。
4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。
4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。
5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。
希望对你有所帮助!。
汇编语言实验报告(实验一)一.实验目的1.掌握汇编语言程序的上机步骤;(1)用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件)。
(2)用MASM程序产生OBJ文件。
(3)用LIINK程序产生EXE文件。
(4)程序的运行(用DEBUG或在DOS下直接运行)。
2.掌握DEBUG的使用方法。
二.程序说明1.在数据段DATA中有两个数据X和Y,假设X=1122H,Y=3344H,编程求两个字的和,结果存放到Z单元中。
2.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串传送到DEST_BUFFER开始的单元中。
3.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串向下移10个单元。
三.设计思想1、将1122H和3344H分别存放在双字x,y中,定义双字Z,x,y带进位相加放入Z中。
2、定义数据段source_buffer,把数据段地址放入ds寄存器,定义附加段extra_buffer,把附加段地址放入es寄存器,移动整个字符串。
3、定义数据段附加段,先移高位,这样要移20次。
四.程序代码1、DATA SEGMENTX DW 1122HY DW 3344HZ DW ?DATA ENDS ;数据段定义结束STACK SEGMENT ;堆栈段定义开始DW 40 DUP(0)STACK ENDS ;堆栈段定义结束CODE SEGMENT ;代码段定义结束ASSUME CS:CODE,SS:STACK,DS:DATASTART: MOV AX,DATAMOV DS,AX ;设置数据段的开始地址MOV DX,XADC DX,YMOV Z,DXMOV AH,4CH ;返回DOCINT 21HCODE ENDSEND START2、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,EXTRAMOV ES,AXLEA SI,SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START3、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS, AXMOV AX, EXTRAMOV ES, AXLEA SI, SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START五.结果分析并回答:1.设计的程序包含了几个段第1段包含数据段、堆栈段、代码段第2、3个包含数据、附加段、代码段2.你的代码经过编译和连接之后,总共占用多少个字节第1、2个占30个字节,第3个占32个字节3.调用DEBUG进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?程序1第一条指令:1454:000 BB4B14 MOV AX,144B最后一条指令:1451:001E 807F0400 CMP BYTE PTR [BX+04],00程序2第一条指令:1450:0000 1E PUSH DS最后一条指令:1450:001E 8B0? MOV AX,[BX]程序3第一条指令:144D:0000 1E PUSH DS最后一条指令:144D:0020 8B5702 MOV DX,[DX+02]。
汇编语言编程实验报告实验目的:使用汇编语言编写程序,实现特定功能。
实验过程和结果:1. 程序设计在本次实验中,我们使用汇编语言编写程序,实现了一个简单的计算器功能。
以下是我们设计的程序伪代码:```data segment; 定义数据段operand1 db ?operand2 db ?operator db ?result db ?data endscode segmentassume cs:code, ds:datastart:; 程序入口mov ax, datamov ds, ax; 获取用户输入mov ah, 01hint 21hmov operator, almov ah, 01hint 21hmov operand1, almov ah, 01hint 21hmov operand2, al; 根据运算符进行计算 cmp operator, '+'je addcmp operator, '-'je subcmp operator, '*'je mulje div; 显示结果mov dl, resultadd dl, 30h ; 转换为ASCII码 mov ah, 02hint 21h; 程序结束mov ah, 4chint 21hadd:; 加法运算mov al, operand1add al, operand2mov result, aljmp displaysub:; 减法运算mov al, operand1mov result, aljmp displaymul:; 乘法运算mov al, operand1mul operand2mov result, aljmp displaydiv:; 除法运算mov al, operand1mov ah, 0 ; 清空余数 div operand2mov result, aljmp display display:; 显示计算结果mov dl, resultadd dl, 30h ; 转换为ASCII码mov ah, 02hint 21h; 程序结束mov ah, 4chint 21hcode endsend start```2. 实验结果运行程序后,我们通过键盘输入运算符和操作数,程序能够正确地进行相应的运算并显示结果。
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:**************** 学号:**********姓名:*****目录实验一 (3)实验二 (7)实验三 (12)实验四 (22)实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序实验内容一:e ds:0200 E7 1A 3F 00e ds:0204 C4 E5 6B 00实验内容二:(1)直接寻址方式MOV AX,[0200]MOV BX,[0202]ADD AX,[0204]ADC BX,[0206]MOV [0208],AXMOV [020A],BX(2)寄存器间接寻址方式MOV SI,0200HMOV DI,0204HMOV BX,0208HMOV AX,[SI]MOV DX,[SI+2]ADD AX,[DI]ADC DX,[DI+2]MOV [BX],AXMOV [BX+2],DX四.实验结果(包括必要的截图)实验内容一:输入数据:显示数据:实验内容二:(1)直接寻址方式程序段编辑:反汇编:运行:结果在DS:0208 单元中为00AB00ABH(2)寄存器间接寻址方式程序段编辑:反汇编:运行:结果高字存放在dx中,低字存放在ax中(结果为00AB00ABh)五.实验体会通过本实验,实践debug程序中的命令,并在debug下调试运行汇编语言源程序。
在实践过程中,解决如何把数据录入存储单元、debug命令如何使用等问题后,知道存数据例如1234进存储单元时要34 12存,还有掌握了寄存器的寻址方式。
实验二汇编语言程序设计(顺序、循环)一.实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
二.实验内容1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。
试编写汇编语言程序完成以下功能:①计算表达式值(V–(X*Y+Z-720))/X;②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。
2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。
如果有,输出‘Yes’;否则,输出‘No’)。
三.实验过程和程序(注:附加题没有做)实验内容一:X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。
试编写汇编语言程序完成以下功能:①计算表达式值(V–(X*Y+Z-720))/X;②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。
Data segmentx dw ?y dw ?z dw ?v dw ?sum1 dw ?sum2 dw ?Data endsCode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ax,ximul ymov cx,axmov bx,dxmov ax,zcwdadd cx,axadc bx,dxsub cx,720sbb bx,0mov ax,vcwdsub ax,cxsbb dx,bxidiv xmov sum1,axmov sum2,dxmov ah,4chint 21hCode endsend start实验内容二:求一个班50名学生成绩的平均值(为了方便,只设置了5个学生数据)data segmentgrade dw 90,80,80,70,60;平均数76data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axxor ax,axmov cx,5mov bx,offset gradeagain: add ax,[bx]add bx,2loop againmov cx,5cwdidiv cxmov ah,4chint 21hcode endsend start实验内容三:从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串data segmentbuffer db 50db ?db 50 dup('$')cr db 0ah,0dh,"$"data endscodes segmentassume cs:codes,ds:datastart:mov ax,datamov ds,axinput:mov ah,10lea dx,bufferint 21hlea dx,crmov ah,9int 21houtput:lea dx,buffer+2mov ah,9int 21hmov ah,4chint 21hcodes endsend start四.实验结果(包括必要的截图)实验内容一:设x=156,y=10,z=220,v=2000,则sum1=0006h,sum2=0004h 在ax中看sum1,在dx中看sum2实验内容二:预先设置的数据求得平均数为76,在ax中查看,即ax=004Ch实验内容三:五.实验体会通过本实验,将课本上学到的算术运算类指令、变量定义伪指令、存储单元、DOS 0AH 号功能(字符串输入)和DOS 09H功能(字符串输出)等在实验中实现。
在实现过程中,解决遇到的问题(符号扩展、定义的数组存储空间地址、字符串如何输入输出等)后,对上述知识有了更深的了解,并掌握实现它。
实验三汇编语言子程序设计(分支、子程序)一.实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
3、通过汇编语言了解高级语言的参数传递等知识。
二.实验内容1、BL中的只有一位为1。
编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。
2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
3. 实践C Asm的转换过程。
三.实验过程和程序实验内容一:BL中的只有一位为1。
编写程序测试,并输出提示信息“The X Bit is 1”(1)转移表;转移表,bl 左到右1-8位DATAS SEGMENTstr1 db 'the 1 bit is 1',0dh,0ah,'$'str2 db 'the 2 bit is 1',0dh,0ah,'$'str3 db 'the 3 bit is 1',0dh,0ah,'$'str4 db 'the 4 bit is 1',0dh,0ah,'$'str5 db 'the 5 bit is 1',0dh,0ah,'$'str6 db 'the 6 bit is 1',0dh,0ah,'$'str7 db 'the 7 bit is 1',0dh,0ah,'$'str8 db 'the 8 bit is 1',0dh,0ah,'$'DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXmov bl,00010000bmov cx,8mov si,0again:shl bl,1jc nextadd si,3loop againnext:add si,offset jmptablejmp sijmptable:jmp near ptr l1jmp near ptr l2jmp near ptr l3jmp near ptr l4jmp near ptr l5jmp near ptr l6jmp near ptr l7jmp near ptr l8l1:lea dx,str1jmp outputl2:lea dx,str2jmp outputl3:lea dx,str3jmp outputl4:lea dx,str4jmp outputl5:lea dx,str5jmp outputl6:lea dx,str6jmp outputl7:lea dx,str7jmp outputl8:lea dx,str8output:mov ah,9int 21hMOV AH,4CHINT 21HCODES ENDSEND START(2)地址表;地址表,bl左到右依次是第1-8位DATAS SEGMENTstr1 db 'the 1 bit is 1',0dh,0ah,'$'str2 db 'the 2 bit is 1',0dh,0ah,'$'str3 db 'the 3 bit is 1',0dh,0ah,'$'str4 db 'the 4 bit is 1',0dh,0ah,'$'str5 db 'the 5 bit is 1',0dh,0ah,'$'str6 db 'the 6 bit is 1',0dh,0ah,'$'str7 db 'the 7 bit is 1',0dh,0ah,'$'str8 db 'the 8 bit is 1',0dh,0ah,'$'addrtable dw show1,show2,show3,show4,show5,show6,show7,show8 DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXmov bl,00001000bmov cx,8mov si,0 again:shl bl,1jc nextadd si,2loop again next:jmp addrtable[si]show1:lea dx,str1jmp output show2:lea dx,str2jmp output show3:lea dx,str3jmp output show4:lea dx,str4jmp output show5:lea dx,str5jmp output show6:lea dx,str6jmp output show7:lea dx,str7jmp output show8:lea dx,str8jmp outputoutput:mov ah,9int 21hMOV AH,4CHINT 21HCODES ENDSEND START实验内容二:编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)(1)堆栈传递参数;z=x*y+x-y,x、y、z为有符号数,堆栈传递DATAS SEGMENTx dw 5y dw 2z dw ?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXsub sp,2push ypush xcall calpop zmov bx,zMOV AH,4CHINT 21Hcal procpush bpmov bp,sppush axpush bxmov ax,[bp+4]mov bx,[bp+6]imul bxadd ax,[bp+4]adc dx,0sub ax,[bp+6]sbb dx,0mov [bp+8],axpop bxpop axpop bpret 4cal endpCODES ENDSEND START(2)寄存器传递参数;z=x*y+x-y,x、y、z为有符号数,寄存器传递DATAS SEGMENTx dw 5y dw 2z dw ?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXmov ax,xmov bx,ycall calmov z,axMOV AH,4CHINT 21Hcal procmov cx,aximul bxadd ax,cxadc dx,0sub ax,bxsbb dx,0retcal endpCODES ENDSEND START(3)内存传递参数;z=x*y+x-y,x、y、z为有符号数,内存传递DATAS SEGMENTx dw 5y dw 2z dw ?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXcall calMOV AH,4CHINT 21Hcal procmov ax,ximul yadd ax,xadc dx,0sub ax,ysbb dx,0mov z,axretcal endpCODES ENDSEND START实验内容三:实践C—>ASM的转换过程_TEXT SEGMENT_c$ = -32 ; size = 2_b$ = -20 ; size = 2_a$ = -8 ; size = 2_main PROC ; COMDAT; 4 : void main(){push ebpmov ebp, espsub esp, 228 ; 000000e4Hpush ebxpush esipush edilea edi, DWORD PTR [ebp-228]mov ecx, 57 ; 00000039Hmov eax, -858993460 ; ccccccccH rep stosd; 5 :; 6 : short a,b,c;; 7 : a=1;mov eax, 1mov WORD PTR _a$[ebp], ax; 8 : b=a+1;movsx eax, WORD PTR _a$[ebp]add eax, 1mov WORD PTR _b$[ebp], ax; 9 : c=a+b;movsx eax, WORD PTR _a$[ebp]movsx ecx, WORD PTR _b$[ebp]add eax, ecxmov WORD PTR _c$[ebp], ax; 10 :; 11 :; 12 : }xor eax, eaxpop edipop esipop ebxmov esp, ebppop ebpret 0_main ENDP_TEXT ENDS四.实验结果(包括必要的截图)实验内容一:(1)转移表:设bl=00010000b(2)地址表:设bl=00001000b实验内容二:设x=5,y=2,则z=13(000D),结果在ax (1)堆栈传递参数(结果在bx中查看)(2)寄存器传递参数(结果在ax中查看)(3)内存传递参数(结果在ax中查看)五、实验体会通过本实验,让我更加深入了解地址表和转移表、子程序和从C输出汇编文件等知识,通过实现地址表与转移表加深了对汇编寻址方式的了解;实现子程序,掌握主程序如何调用子程序,及子程序与主程序之间的参数传递方式;用VS实现C->ASM后,对C或C++有了新的认识。