汇编语言实验报告
汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 201X~201X学年第二学期实验项目列表福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:_ _1#605 实验设备号: I3 实验时间:201X.4.25指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看L ST文件;(3)生成BJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验环境 IBM—PC机及其兼容机;实验的软件环境是:操作系统: DS2.0以上;调试程序: DEBUG.CM;文本编程程序: EDIT.EXE、PS.EXE;宏汇编程序:MA SM.EXE(或AS M .EXE);连接装配程序:L INK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名 1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDI T查看1.LS T文件。
试回答: DA1,DA2的偏移量分别是多少?C UNT的值为多少?DATA SEGME NT RG 20HNUM1=8 NUM2=NUM1+10H DA1 DB ‘I BM PC’ CUN T EQU $-DA1 DATA END S DA2 DB 0AH, 0DH EN D(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)D ATA SEGMEN T VAR1 DB0, 25, DH,300 VAR2DB 12H, A4H, 6BH VAR3 DB ’ABCD EF’ VAR4 D 1H, 5678H VAR5 D 10H DUP(?) D ATA ENDS C DE SEGMENT ASSUME CS: CDE, DE: DATA MV D S, AX LEASI, VAR5 M V BX, FFSE T VAR2 MV[SI], 0ABH MV AX, VA R1+2 MV [B X], [SI] M V VAR5+4,VAR4 MV AH, 4CH INT21H ENDS E ND START B EING MV AX, DATA CDE(3)输入正确的程序,汇编、连接、运行 STACKS SEGMENT S TACK D 128DUP(?) EN DS SEGMENT ENDS SEGM ENT ASSUME CS: CDES,DS: DATAS STACKS DA TAS DATASCDES STRIN G DB ‘ELCM E!’, 13, 10, ‘$’ STA RT: MV AX, DATAS MV DS, AX LEA DX, S TRING MV A H, 9 INT 21H MV AH,4CH INT 21H CDES END S END STAR T4.算法描述及实验步骤 1)首先,用记事本输入各段程序,并储存成源程序,保存在MASM目录下。
汇编语言实验报告1用表格形式显示ASCII字符

汇编语言实验报告1一、实验内容:用表格形式显示ASCII字符二、实验要求:按15行×16列的表格形式显示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。
说明:显示调用DOS中断功能02,先考虑显示单个字符,再进行循环,程序关键在于寄存器的使用和循环控制。
MOV AH,02HMOV DL,10H ; 输出要显示的符号的代码,放入DL寄存器INT 21HMOV AH,02HMOV DL,0DHINT 21H ; 输出回车符MOV AH,02HMOV DL,0AHINT 21H ; 输出换行符三、实验源代码如下:DA TAS SEGMENTDA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DA TASMOV DS,AXMOV DX,10H ;初植10HNEXT:MOV CX,10H ;16列LOOP1:MOV AH,02H ;显示输出DL字符INT 21HINC DX ;DX加1PUSH DX ;把DX推进栈保存MOV DL,0 ;显示空白符INT 21HPOP DX ;把DX之前的数取回来LOOP LOOP1 ;当CX=0时会自动跳出LOOP1循环PUSH DX ;保存DX的数,即为了保存ASCII码MOV AH,02HMOV DL,0AH ;显示换行字符INT 21HMOV AH,02HMOV DL,0DH ;显示回车INT 21HPOP DX ;把DX之前的数取回来CMP DX,100H ;最后的字符的ASCII码为100HJB NEXT ;小于时就会NEXTMOV AH,4CH ;带返回码终止INT 21HCODES ENDSEND START四、实验运行结果如下:(附截图)。
汇编语言——实习报告

汇编语言——实习报告在大学的学习生涯中,我有幸参与了一次关于汇编语言的实习。
通过这次实习,我对汇编语言有了更深入的理解和掌握,也积累了宝贵的实践经验。
一、实习目的本次实习的主要目的是让我们熟悉汇编语言的编程环境和基本语法,掌握汇编语言程序的设计和调试方法,提高我们的编程能力和解决问题的能力。
同时,通过实际的项目开发,培养我们的团队合作精神和创新意识。
二、实习环境我们使用的编程环境是 MASM(Microsoft Macro Assembler),这是一款功能强大的汇编语言编译器。
同时,我们还使用了一些调试工具,如 DEBUG 和 CodeView,来帮助我们查找和解决程序中的错误。
三、实习内容1、基础语法学习在实习的初期,我们首先学习了汇编语言的基础语法,包括数据类型、寄存器的使用、指令系统等。
通过大量的示例代码和练习,我们逐渐掌握了如何使用汇编语言进行基本的算术运算、逻辑运算和数据传输。
2、程序设计与实现在掌握了基础语法之后,我们开始进行程序设计和实现。
我们先后完成了一些简单的程序,如加法器、减法器、乘法器等。
在这个过程中,我们不仅要考虑程序的功能实现,还要注意代码的优化和效率。
3、系统调用和中断处理接下来,我们学习了如何在汇编语言中进行系统调用和中断处理。
通过使用系统提供的中断服务例程,我们实现了一些与操作系统交互的功能,如文件操作、控制台输入输出等。
4、项目开发在实习的后期,我们分组进行了一个小型的项目开发。
我们的项目是开发一个简单的操作系统内核,包括进程管理、内存管理、文件系统等模块。
在项目开发过程中,我们充分发挥了团队合作的精神,每个人负责一个模块的设计和实现,然后进行整合和调试。
四、实习中遇到的问题及解决方法1、语法错误在编写汇编代码时,由于对语法规则的不熟悉,经常会出现语法错误。
例如,忘记在指令后面添加操作数、寄存器的使用错误等。
对于这些错误,我们通过仔细检查代码和参考教材中的语法规则,逐步找出并改正了错误。
汇编语言实验7实验报告

汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。
二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。
三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。
为了方便起见,我们可以先规定字符串的最大长度为100。
接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。
然后,我们需要使用INT 21H中断来读取用户输入的字符串。
具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。
接着,我们需要将该字符串逆序输出到屏幕上。
为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。
具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编语言实验七实验报告

汇编语言实验七实验报告汇编语言实验七实验报告一、实验目的本次实验的目的是了解多重循环结构的编程技巧,并使用它们对数据进行排序和搜索。
二、实验内容本实验内容主要包括:1.使用多重循环结构实现数据的排序,如冒泡排序、快速排序等;2.使用多重循环结构实现数据的搜索,如线性搜索、二分搜索等;3.使用结构化编程实现控制结构,如条件判断、循环结构等来完成数据的排序和搜索。
三、实验过程1. 冒泡排序本实验使用多重循环结构,采用冒泡排序的方法,实现对一组数据的排序。
具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 0, 5, 2count dw 6temp dw ?.codemain procmov ax,@data mov ds,axmov ax,array mov si,axmov cx,count mov cl,2l1:mov di,simov bx,[di] inc dil2:mov ax,[di] cmp ax,bxjng l3mov temp,ax mov [di],bx mov bx,temp l3:inc diloop l2inc sidec cxjnz l1 ;循环结束 mov ax,countsub ax,2l4:mov di,simov ax,[di]mov bx,[di+2]cmp bx,axjng l5mov temp,axmov [di],bxmov [di+2],temp l5:inc sidec axjnz l4 ;循环结束 tmov ax,4c00hint 21hmain endpend main上述代码主要实现了多重循环结构,包括两个重复循环:一个用来对数据进行比较,另一个用来循环处理剩下的数据项,直到排序完成。
2. 线性搜索接下来实现线性搜索的功能,具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 5, 0, 2count dw 6key dw 4add dw 0.codemain procmov ax,@datamov ds,axmov ax,arraymov di,axmov cx,countl1:cmp [di], keyjne l3jmp l2l3:inc diloop l1l2:mov ax,add mov bx,count sub bx,1mul bxadd ax,key mov bx,2div bxinc axmov bx,4mul bxmov di,axmov ax,array add ax,dimov si,axmov ax,[si] mov bx,keyje l4mov ax,-1l4:mov ax,4c00hint 21hmain endpend main上述代码主要实现了线性搜索的功能,通过比较数组中的每一项与给定的关键字,如果相同,则记录下该项的偏移量,然后根据偏移量计算出索引,最终返回数组中搜索到的数据。
汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。
二进制数。
要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。
本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。
下编写完整的汇编语言程并生成可执行文件运行。
二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。
构程序。
简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。
2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。
data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。
系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。
十六进制数通过ASCII码对照转换为二进制数。
A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。
汇编语言试验报告

实验二报告一、实验目的掌握汇编语言分支结构程序设计方法以及int 21h 常用中断方法。
二、实验内容编写程序,实现 3 个数比较大小,并从高到低输出结果。
调试该程序,并输出显示结果本实验是考查学生对分支程序设计的掌握程度,掌握条件转移指令的应用。
三、实验分析运用循环语句将三个数分别输入缓冲区,使用比较字符,运用跳转语句,实现选择升序还是降序排序,再对三个进行比较然后排序。
排序完成后再分别赋给缓冲区中的数组,最后输出!四、实验代码DATA SEGMENTbuf db 3 dup (?)buf1 db?str db 0ah,0dh,'input 3 numbers :$'str0 db 0ah,0dh,'If print in asc order,input 0;else input 1 :$'str1 db 0ah,0dh,'The sort in an descending order:$'str2 db 0ah,0dh,'The sort in a ascending order:$'str3 db 0ah,0dh,'---------------------------------------------$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:mov ax,datamov ds,axmov cx,3lea dx,str ;显示提示信息mov ah,09hint 21hlea bx,bufloop1:mov ah,01hint 21hmov [bx],alinc bxloop loop1lea dx,str0 ;显示提示信息mov ah,09hint 21hmov dx,offset buf1 ;为输出的字符选择存储空间mov ah,01hint 21hcmp al,30h ;输入的字符与0比较jz ascend ;若输出的字符等于0,则跳转到ascend,执行升序descend: ;降序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljae n1 ;大于等于则跳转xchg al,bln1:cmp al,cljae n2xchg al,cln2:cmp bl,cljae n3xchg bl,cln3:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str1mov ah,09hint 21hcall pascend: ;升序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljnae n4 ;小于等于则跳转xchg al,bln4:cmp al,cljnae n5xchg al,cln5:cmp bl,cljnae n6xchg bl,cln6:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str2mov ah,09hint 21hcall pp procmov si,offset bufmov cx,3fe:mov dl,[si]mov ah,02hint 21hmov dl,20h ;显示空格mov ah,02hint 21hinc siloop femov ah,4chint 21hretp endpCODE ENDSEND START五、总结通过本次实验,我发现自己对跳转语句的不熟悉,导致实验过程中遇到好多错误,还有没能实现进行多个数的比较,有待改进。
汇编语言实验报告_6

青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序1、启动DOS操作系统2、运行程序(若当前盘为C)C:>DEBUG↙– ;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令)3、用“A”命令编辑和汇编源程序-A136C:0100 MOV AX,[0200]136C:0103 MOV BX,[0202]136C:0107 ADD AX,[0204]136C:010B ADC BX,[0206]136C:010F MOV [0208],AX136C:0112 MOV [020A],BX136C:01164、用“U”命令反汇编验证源程序-U CS:0100136C:0100 A10002 MOV AX,[0200]136C:0103 8B1E0202 MOV BX,[0202]136C:0107 03060402 ADD AX,[0204]136C:010B 131E0602 ADC BX,[0206]136C:010F A30802 MOV [0208],AX136C:0112 891E0A02 MOV [020A],BX136C:0116 0000 ADD [BX+SI],AL136C:0118 0000 ADD [BX+SI],AL136C:011A 0000 ADD [BX+SI],AL136C:011C 3400 XOR AL,00136C:011E 5B POP BX136C:011F 1300 ADC AX,[BX+SI]-5、程序未执行前,用“R”命令观察,相关寄存器的内容。
–R↙如:(AX)=0000,(BX)=0000,(SI)=0000,(DI)=0000,(CS)=136C,(IP)=0100。
6、在程序未执行前,用“D”命令观察DS:0200H,DS:0204H、DS:0208H单元的内容–D 200 20B ↙7、用“G”命令运行源程序–G =0100 0116 ↙8、再用“D”命令观察DS:0200H~DS:020BH字节单元中的内容–D 200 20B↙9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。
四.实验结果(包括必要的截图)1-4截图5-9截图实验结果分析1、程序运行结果:(AX)=00AB,(BX)=00ABDS:0208H四字节单元的内容:2、试用寄存器间接寻址方式编写程序段,完成上述程序段的功能。
(参考下列程序流程图)附加题1.从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x-E 0000 1C 02 01 00 FF 00 38 04-D 00001361:0000 1C 02 01 00 FF 00 38 04-1D F0 4F 03 C5 0D 8A 031361:0010 C5 0D 17 03 C5 0D 11 04-01 01 01 00 02 FF FF FF1361:0020 FF FF FF FF FF FF FF FF-FF FF FF FF 7C 0D 4E 011361:0030 85 12 14 00 18 00 61 13-FF FF FF FF 00 00 00 001361:0040 05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 001361:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 201361:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 201361:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00-A1361:0100 MOV AX,[0000]1361:0103 MOV BX,[0002]1361:0107 IMUL BX1361:0109 ADD AX,[0004]1361:010D ADC DX,00001361:0110 SUB AX,21C1361:0113 SBB DX,00001361:0116 MOV CX,AX1361:0118 MOV BX,DX1361:011A MOV AX,[0006]1361:011D MOV DX,00001361:0120 SUB AX,CX1361:0122 SBB DX,BX1361:0124 MOV BX,[0000]1361:0128 IDIV BX1361:012A-G =0100 012AAX=0001 BX=021C CX=00FF DX=011D SP=FFEE BP=0000 SI=0000 DI=0000DS=1361 ES=1361 SS=1361 CS=1361 IP=012A NV UP EI PL ZR NA PE NC1361:012A 0000 ADD [BX+SI],AL DS:021C=00-五、实验体会1.DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。
2.在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。
3.在DEBUG下,大小写不敏感。
4.使用DEBUG进行实验,非常麻烦。
实验二汇编语言程序设计(顺序、循环)一.实验目的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’)。
三.实验过程和程序1.DATA SEGMENTX DW 45Y DW 67Z DW 89V DW 12SUM1 DW ?SUM2 DW ?DATA EDNSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AX,XMOV BX,YIMUL BXMOV BX,ZADD AX,BXADC DX,0MOV BX,720SUB AX,BXSBB DX,0MOV BX,AXMOV CX,DXMOV AX,VCWDSUB AX,BXSBB DX,CXMOV BX,XIDIV BXMOV SUM1,AXMOV SUM2,DXMOV AH,4CHINT 21HCODE ENDSEND START2.DATA SEGMENTGRADE DW 10 DUP(55,65,75,85,95) DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV CX,50MOV BX,0MOV AX,0AGAIN:ADD AX,GRADE[BX]INC BXINC BXLOOP AGAINMOV BX,50DIV BXMOV AH,4CHINT 21HCODE ENDSEND START3.LEN EQU 51DATA SEGMENTSTRING DB LEN,?,LEN DUP(?) LF DB 0AHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXLEA DX,STRINGMOV AH,0AHINT 21HMOV DL,LFMOV AH,2INT 21HMOV CL,STRING[1]MOV CH,0LEA BX,STRING[2]ADD BX,CXMOV BYTE PTR [BX],'$'LEA DX,STRING[2]MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START四、实验结果(包括必要的截图)1.2.3.四.实验体会1.通过实验,掌握了masm下的汇编格式,运行和调试的主要过程:masm1.txt→link 1.obj→debug 1.exe;2.在第一个实验中,需要注意,如果数的类型不同,需要进行扩展,而且在masm 中,数默认为十进制,而在debug环境下,数默认为是十六进制的;3.在第二个实验中,需要掌握循环程序设计的方法;4.在第三个实验中,需要注意串的操作指令,注意当题目给定字符串不超过50时,应当LEN EQU 51,这样程序才能正确运行。
实验三汇编语言子程序设计(分支、子程序)一.实验目的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有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
三.实验过程和程序1.地址表Data segment;AddT dw L0,L1,L2,L3,L4,L5,L6,L7S0 db 'The 0 Bit is 1$'S1 db 'The 1 Bit is 1$'S2 db 'The 2 Bit is 1$'S3 db 'The 3 Bit is 1$'S4 db 'The 4 Bit is 1$'S5 db 'The 5 Bit is 1$'S6 db 'The 6 Bit is 1$'S7 db 'The 7 Bit is 1$'Serror db 'NO BIT is 1 $'Data endsCode segmentassume cs:code, ds:datastart:mov ax,datamov ds,axmov bl,01000000Bcmp bl,0jnz nextjmp errornext: mov si,0mov cx,8Again:shr bl,1Jc Switchinc siloop AgainSwitch:mov Bx,sishl si,1add si,Bxadd si, offset JMPTablejmp siJMPTable:JMP L0JMP L1JMP L2JMP L3JMP L4JMP L5JMP L6JMP L7org $+80HL0: mov dx,offset S0mov ah,9int 21hjmp exitL1: mov dx,offset S1mov ah,9int 21hjmp exitL2: mov dx,offset S2mov ah,9int 21hjmp exitL3: mov dx,offset S3mov ah,9int 21hjmp exitL4: mov dx,offset S4mov ah,9int 21hjmp exitL5: mov dx,offset S5mov ah,9int 21hjmp exitL6: mov dx,offset S6mov ah,9int 21hjmp exitL7: mov dx,offset S7mov ah,9int 21hjmp exiterror: mov dx,offset Serrormov ah,9int 21hexit:mov ah,4chint 21hCode endsend start转移表:DATA SEGMENTS0 DB 'The 0 bit is 1', 0AH, 0DH, '$' S1 DB 'The 1 bit is 1', 0AH, 0DH, '$' S2 DB 'The 2 bit is 1', 0AH, 0DH, '$'S3 DB 'The 3 bit is 1', 0AH, 0DH, '$'S4 DB 'The 4 bit is 1', 0AH, 0DH, '$'S5 DB 'The 5 bit is 1', 0AH, 0DH, '$'S6 DB 'The 6 bit is 1', 0AH, 0DH, '$'S7 DB 'The 7 bit is 1', 0AH, 0DH, '$' NONE DB 'Every bit is 0', 0AH, 0DH, '$' DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START:MOV AX, DATAMOV DS, AXMOV CH, 8MOV AX, -3MOV BL, 4AGAIN:DEC CH ;CMP CH, -1 ;JZ NONE1 ;ADD AX, 3 ;SHR BL, 1JNC AGAINLEA SI, JMPTBADD SI, AXJMP SIJMPTB:JMP NEAR PTR L0JMP NEAR PTR L1JMP NEAR PTR L2JMP NEAR PTR L3JMP NEAR PTR L4JMP NEAR PTR L5JMP NEAR PTR L6JMP NEAR PTR L7L0:LEA DX, S0JMP DONEL1:LEA DX, S1JMP DONEL2:LEA DX, S2JMP DONEL3:LEA DX, S3JMP DONEL4:LEA DX, S4JMP DONEL5:LEA DX, S5JMP DONEL6:LEA DX, S6JMP DONEL7:LEA DX, S7JMP DONENONE1:LEA DX, NONE DONE:MOV AH, 9H ;INT 21HMOV AH, 4CHINT 21HCODE ENDSEND START2.DATA SEGMENT ORG 0X DW 1234HY DW 5678HZ DD 0CODE SEGMENTASSUME CS:CODE, DS:DATA START:MOV AX, DATAMOV DS, AXSUB SP, 4 ;PUSH X ;PUSH Y ;CALL FXYZLEA BX, ZPOP WORD PTR[BX]POP WORD PTR[BX+2]MOV AH, 4CHINT 21HFXYZ PROC NEAR ;PUSH BPMOV BP, SP ;PUSH AX ;PUSH BXPUSH DXMOV AX, 6[BP]MOV BX, 4[BP]IMUL BXADD AX, 6[BP]ADC DX, 0SUB AX, 4[BP]SBB DX, 0MOV 8[BP], AXMOV 10[BP], DXPOP DXPOP BXPOP AXPOP BPRET 4FXYZ ENDPEND START四.实验结果(包括必要的截图)1.地址表转移表2.五.实验体会1.掌握了分支和子程序结构的设计方法,还掌握了地址表和转移表的设计思路;2.着重阅读书122-124,有关地址表和转移表的设计的地方;3.需要注意在计算地址表时候,乘以2,而在计算转移表的时候乘以3,注意两者区别。