汇编语言实验题目及测试截图1、2

合集下载

汇编语言实验报告1~7

汇编语言实验报告1~7

汇编语言实验报告1~7实验一:数据传输指令、算术指令、逻辑指令的使用实验内容:利用汇编语言,编写一个程序,实现两个整数相加,并将结果存入第三个变量中实验步骤:1. 声明三个变量a、b、c2. 将10存入a,将20存入b3. 将a的值传入al,将b的值传入bl4. 使用add指令将al和bl相加,将结果存入al5. 将al的值传入c6. 显示c的值实验结果:a db 10mov al,aadd al,blint 21hmov ax,4c00h实验二:分支指令的使用实验内容:利用汇编语言,编写一个程序,实现当输入的值为正数时,输出"I'm positive!";当输入的值为负数时,输出"I'm negative!";当输入的值为零时,输出"I'm zero!"1. 定义一个变量num2. 接收用户输入,并将其存储在num中3. 用test指令判断num的值4. 当num=0时,执行输出"I'm zero!"的指令7. 退出程序num db ?lea dx, promptsub al, '0'test num, numjz zerojs negjmp positiveneg:output:zero_msg db 'I am zero!$'prompt db 'Please enter a number:', 0dh, 0ah, '$'1. 定义变量i、sum,分别表示累加的数字和累加和2. 将i赋初值1,sum赋初值03. 进入循环5. 使用inc指令将i加16. 使用cmp指令将i与10比较,如果i小于等于10,继续循环,否则退出循环7. 输出结果mov bx, iloopStart:inc bx实验四:过程调用的使用2. 循环遍历1到100之间的每个数3. 用一个for语句嵌套一个for语句判断该数是否为质数4. 用两个自定义的子程序is_prime和output输出结果call is_primeskip:cmp i, 100prime_loop:div blretje newlinejmp done实验目的:掌握字符串操作指令的使用实验内容:利用汇编语言,编写一个程序,将字符串"SJTU"改为字符串"MIT"1. 定义字符串SJTU和MIT2. 定义两个变量i和len,分别表示字符串的下标和长度3. 使用movsb将SJTU的值传到MIT中4. 输出MITSJTU db 'SJTU'lea si, SJTUstringLoop:实验内容:利用汇编语言,编写一个程序,实现将输入的字符串写入一个文件中,然后再读取该文件中的字符串并输出2. 打开文件3. 将字符串写入文件中4. 关闭文件6. 读取文件内容8. 输出读取的字符串fileName db 'test.txt'content db 32 dup(?)mov cx, word ptr [content]实验内容:利用汇编语言,编写一个程序,在系统按下Ctrl+C时,输出一条信息并退出1. 声明函数handleCtrlC2. 获取中断21的地址,将其存储到文件头中org 100hmov [old_int_21h], es:bxmov dx, offset handleCtrlCend开始:。

华南农业大学8086汇编实验题目

华南农业大学8086汇编实验题目

题目名称实验一汇编语言程序结构题目关键字源程序结构debug题目录入时间2013-3-13 22:45:26题目内容一、实验目的1.掌握汇编语言程序上机过程。

2.掌握汇编语言结构。

3.了解汇编程序、连接程序、DOS系统装入和返回功能。

4.掌握用DEBUG调试汇编语言程序的方法二、实验要求1. 编写完整的汇编语言程序:(1) 先输出字符串“BASED ADDRESSING”。

然后在下一行逆序输出字符串“BASED ADDRESSING”。

(2) 从键盘上输入2个一位的正数,求出它们的和(假设和不超过1位)。

(3) 试编写一段程序,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字单元UP中;找出小于42H的无符号数的个数并存入字单元DOWN中。

2. 在DEBUG下查看程序执行的过程,以及变量值的变化。

3. 演示程序运行结果,请指导教师检查。

三、思考汇编语言程序中语句END后的标号作用是什么?2. 采用标准序结构编制源程序,用ret结束程序运行返回操作系统时,可否将语句main proc far中的far属性去掉,为什么?3. 一个段的大小为多少?一定是64KB吗?如何在DEBUG下查看程序在内存的存放情况?题目名称实验二程序结构与简单程序设计题目关键字简单程序设计题目录入时间2013-4-1 22:45:55题目内容一、实验目的1.掌握汇编语言源程序结构。

2.掌握汇编语言调试方法。

二、实验要求1.编写完整的汇编语言程序:(1) 试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。

(2) 编写程序,从键盘接收一个小写字母,然后找出它的前导字母和后续字母,再按顺序显示这三个字符。

(3) 试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NO MA TCH”.(4) 编写程序,将一个包含有20个数据的数组M分成2个数组:正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。

山东大学汇编语言上机实验——实验二

山东大学汇编语言上机实验——实验二

程序的基本结构练习一:循环程序设计一、实验目的(1) 加深对循环结构的理解;(2) 掌握循环程序的设计方法;(3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。

同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。

2.设STR字符串是以0结尾。

试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。

3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。

三、算法描述流程图实验内容1、2、3的流程图分别为图1、图2、图3。

四、实验步骤1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。

同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。

1)输入源程序:DA TA SEGMENTBUF DW 23,123,-12,-210,45,0,90,-453BUF1 DW 8 DUP(0)BUF2 DW 8 DUP(0)A DWB DW DA TA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TASTART: MOV AX, DATAMOV DS, AXLEA BX, BUFLEA SI, BUF1LEA DI, BUF2MOV A,0MOV B,0MOV CX,8L0: MOV AX,[BX]CMP AX,0JGE L1MOV [DI],AXADD DI,2INC BJMP NEXTL1: MOV [SI],AXADD SI,2INC ANEXT: ADD BX,2LOOP L0MOV AH, 4CHINT 21HCODE ENDSEND START2)运行程序。

汇编语言实训题

汇编语言实训题
……
CODEENDS
ENDSTART
实训7.1子程序设计
一、实训目的
1.掌握子程序的设计方法。
2.掌握子程序调用方法。
3.掌握参数的传递方法。
二、实训内容
1.子程序计算从2开始的N(N<50)个偶数之和(2+4+6+…),主程序从键盘输入整数N,调用子程序求出N个偶数之和,由主程序显示结果。用3种方法编写完整程序。
MOVAH,2MOVAH,0EH
INT21HINT10H
……
MOVDX,OFFSETS;显示一段话
MOVAH,9
INT21H
……
CODEENDS
ENDSTART
实训6.1顺序程序设计
一、实训目的
1.熟悉汇编语言源程序的结构框架。
2.掌握顺序结构程序设计的基本方法。
3.熟练运用EDIT、MASM、LINK、DEBUG调试汇编语言的源程序。
MESS2DB0AH,0DH,'THE SUM IS:$'
DATAENDS
CODESEGMENT
ASSUME CS:CODE
START:MOVAX,DATA
MOVDS,AX
LEADX,MESS1
CALLREADDEC
CALLCOUNT
LEADX,MESS2
CALLWRITEDEC
MOVAX,4C00H
笑脸的显示要求使用DOS功能调用和BIOS功能调用两种方法完成。
参考程序如下:
DATASEGMENT
SDB‘SMILE!’,0DH,,0AH,’$’
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA

(完整)汇编语言程序设计试卷2答案,推荐文档

(完整)汇编语言程序设计试卷2答案,推荐文档

汇编语言程序设计试卷2答案注意:答案全部写在最后一张试卷纸上,要求表明题号,字迹清楚,答在试卷上不给分一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题2分,共20分)1.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。

(A) 无符号十进制数136(B) 带符号十进制数-120(C) 压缩型BCD码十进制数88(D) 8位二进制数-8的补码表示2.指令指针寄存器是()。

(A) IP(B) SP(C) BP(D) PSW3.当执行指令ADD AX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是()。

(A) 表示结果中含1的个数为偶数(B) 表示结果中含1的个数为奇数(C) 表示该数为偶数(D) 表示结果中低八位含1的个数为偶数4.完成将累加器AL清零,并使进位标志CF清零,下面错误的指令是()。

(A) MOV AL,00H(B) AND AL,00H(C) XOR AL,AL(D) SUB AL,AL5.下列指令执行后总是使CF=0,OF=0的是()。

(A) AND(B) NEG(C) NOT(D) INC6.完成同指令XCHG AX,BX相同功能的指令或指令序列是()。

(A) MOV AX,BX(B) MOV BX,AX(C) PUSH AXPOP BX(D) MOV CX,AXMOV AX,BXMOV BX,CX7.设AH=0,AL=06H,BL=09H,执行指令ADD AL,BLAAA之后,其结果应是()。

(A) AH=01,AL=05(B) AH=1 AL=15(C) AH=0 AL=0FH(D) AH=0 AL=058.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为()。

(A) OF=1,CF=0(B) OF=1,CF=1(C) OF=0,CF=0(D) OF=0,CF=19.在串操作指令前使用重复前缀指令REPE,终止串的重复操作条件是()。

汇编语言实验报告——累加器

汇编语言实验报告——累加器

《汇编语言》实验报告——累加器制作2014级计算机科学与工程学院学号:姓名一、实验要求:1.显示 INPUT N:,提示用户输入数字字串2.检测输入字串的合法性,非法给出提示3.将输入数字字串转化为数值,存入变量n4.累加1~n,存入变量sum5.以十进制显示sum二、流程图:三、源代码:DATAS SEGMENTstr1 db "Input N:","$"str2 db "sum=","$"str3 db 0ah,"error","$"n dw 0sum dw 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA dx,str1;输出提示符mov ah,9int 21hinput:mov ah,01;输入数字int 21hcmp al,0dh;判断是否为回车jz step1cmp al,"0";判断字符合法性jb errorcmp al,"9"ja errorsub al,"0";转化为ASCII码mov ah,0;此段将高位乘10push axmov ax,nshl ax,1push axmov cl,2shl ax,clpop bxadd ax,bxmov bx,0;高位与低位相加pop bxadd ax,bxmov n,axxor cx,cx;设定累加次数mov cx,njmp inputstep1:mov ax,cxsub cx,1step2:add ax,cx;求累加和loop step2mov sum,axlea dx,str2mov ah,9int 21hmov cx,0mov ax,sumstep3:mov dx,0mov bx,10;将结果除以10并把余数压进栈div bxpush dxinc cxcmp ax,0hjnz step3step4:xor ax,axpop ax ;栈内依次输出mov dx,axadd dx,30hint 21hloop step4jmp lasterror:lea dx,str3;输出错误提示语mov ah,9int 21hlast:MOV AH,4CHINT 21HCODES ENDSEND START四、实验测试截图五、实验心得:本次试验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果。

山东大学汇编语言上机实验——实验五

山东大学汇编语言上机实验——实验五

子程序设计2.6显示学生名次表rank编制一个程序,要求接受键盘输入的一个班的学生成绩,并存放于一个50字的grade数组中,其中grade+i保存学号为I+1的学生成绩。

然后根据grade中的学生成绩,把学生成绩依次填入50字的rank数组中,其中rank+i的内容是学号为i+1的学生的名次。

再按学号顺序把名次从终端上显示出来。

本题要做的主要工作和例2.2的内容是完全一样的,只是增加了由用户键入学生成绩及输出学生名次两个部分的内容,因此这三个部分可以用子程序结构来完成。

子程序结构划分的层次图如图2.17所示,可以看出,main为主要模块,其下一层的三个模块为程序的三大部分。

现将各模块说明如下:1.模块名:main 为总模块输入:从键盘输入一个班的学生成绩输出:显示一个班的学生成绩功能:根据输入的学生成绩,计算并显示学生名次。

算法如下:一个学生名次等于成绩高于该学生的人数+1.2.模块名:input输入:以学号为序型键盘输入一个班的学生成绩。

各个成绩之间用逗号隔开,最后以回车符号结束。

输出:把一个班的学生成绩存入grade数组。

功能:接受一个班的学生成绩。

调用子模块decibin把键盘输入的一个十进制数转换为二进制数。

调用子模块crlf完成回车,换行功能。

3.模块名:rankp输入:从grade数组取得一个班的学生成绩。

输出:以学号为序计算出该班每个学生的名次存入rank数组。

功能:计算一个班的学生成绩。

算法为:一个学生的名次等于成绩高于该生的学生人数加1.4,。

模块名;output输入:把rank数组取得一个班的学生名次。

输出:把一个班的学生名次以学号为序在总端上显示出来。

功能:先是一个班的学生名次。

调用子模块decibin把键盘输入的一个十进制数转换为二进制数。

调用子模块crlf完成回车,换行功能。

5:模块名:decilin输入:从键盘输入一个十进制数。

输出:把该数转换成二进制数并存入BX寄存器中。

汇编语言实验报告_6

汇编语言实验报告_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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一调试工具DEBUG的应用
实验目的
通过实验掌握下列知识:
1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG的功能;
2、DEBUG命令: A,D,E,F,H,R,T,U的使用;
3、BCD码、ASCII码及用十六进制数表示二进制码的方法;
4、寄存器: AX,BX,CX,DX,FLAGS,IP。

内容及步骤
注:本次实验可以参照教材上关于DEBUG的叙述内容进行。

一、DEBUG 命令使用
1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显
示提示符 '- '。

2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。

注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。

3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。

4、用命令 F230 23F 12 重复上二项实验,观察结果并比较。

5、用命令 E200 41 42 43 44 45将A-E的ASCII码写入地址为200开始的内存单元中,再用D
命令观察结果,看键入的十六进制数和ASCII码的对应关系。

6、用H命令检查下列各组十六进制数的和与差(补码表示):
(1)56H,34H (2)23H,45H (3)AB,3045H
注:输入 H 12 34 则在下一行显示0046 FFDE,即二者的补码和与差。

在DEBUG环境下所有数据和地址都是按16进制处理,所以不要加后面的H标志。

7、用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。

注:若在DEBUG32环境下用R16和R32命令分别显示16位和32位寄存器内容。

8、用R命令将AX,BX内容改写为1050H及23A8H。

二、8086常用指令练习
1、传送指令
1)用A命令在内存400H处键入下列内容:
-A 0400
****:0400 MOV AX,1234
****:0403 MOV BX,5678
****:0406 XCHG AX,BX
****:0408 MOV AH,10
****:040A MOV AL,20
****:040C MOV CX,89AB
****:040F XCHG AX,CX
****:0411
-
注:****为段寄存器CS的当前值,内容是不一定的,每行命令以回车键结束。

2)用U命令检查键入的程序并记录,特别注意左边的机器码与指令的对应关系。

-U 0400
3)用T命令逐条运行这些指令,每运行一行指令观察各寄存器及IP的变化情况,并注意标
志位的变化情况。

-T =0400 (注:=400是表示从偏移地址400处开始单步执行)
-T (不给出地址,则表示接续上一条指令执行)
-T

2、加减法指令:
1)用A命令在内存100H处键入下列内容:
MOV AH,11
MOV AL,22
ADD AL,AH
SUB AL,33
MOV CX,1234
MOV DX,5678
ADD CX,DX
SUB CX,AX
SUB CX,CX
2)用U命令检查键入的程序及对应的机器码。

3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。

3、带进位加减法:
1)用A命令在内存200H处键入下列内容,并用U命令检查:
MOV AH,12
MOV AL,84
MOV CH,56
MOV CL,78
ADD AL,CL
ADC AH,CH
MOV DH,A7
MOV DL,58
SUB DL,7F
SBB DH,34
2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。

4)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。

使用byte btr即可
* 4、BCD码加减法(选作)
1)内容:
MOV AL,65
ADD AL,16
DAA
2)要求:用A 命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。

注:相加后AL值本来是7B,经DAA指令调整后变为81,即65和16两个BCD码的和。

实验二内存操作数及寻址方法
实验目的
通过实验掌握下列知识:
1、DEBUG命令:A,T,D,F,G;
2、数据在内存中的存放方式和内存操作数的几种寻址方式;
3、汇编指令:INC,DEC,LOOP,INT 3的应用;
4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。

实验内容和步骤
一、内存操作数及各种寻址方式使用
程序内容:
MOV AX,2000 立即数寻址
MOV [200],AX直接寻址
MOV BX,210;立即数寻址
MOV BYTE PTR[BX],50 寄存器间接寻址
MOV CL,40 立即数寻址
INC BX
MOV [BX],CL 寄存器间接寻址
DEC CL
MOV SI,5 立即数寻址
MOV [BX+SI],CL 基址变址寻址
MOV [BX+SI+1],CL 相对基址变址寻址
MOV WORD PTR[BX+SI+2],1234 基址变址寻址
操作步骤
1)用A命令键入上述程序,并用T命令逐条运行。

2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注意是什么寻址方式。

注:D命令显示结果时,双字节数在内存的存放是高地址对应高数据位;指令中出现的BYTE PTR及WORD PTR是因为操作数的宽度必须一致。

二、求累加和程序
程序内容:
MOV BX,200
MOV CX,9
XOR AX,AX
ADD AL,[BX] ;按字节相加
ADC AH,0 ;若有进位则到AH中
INC BX
LOOP 108
INT3
操作步骤:
1)进入DEBUG环境。

2)用命令F 200 L10 40 在内存200H-20FH地址处填入一系列值40H。

3)用命令A 100 将上述程序键入到100H开始的内存中。

注:LOOP指令用到108H号地址,即为ADD指令的当前地址,构成一个循环。

4)用命令G =100 执行该程序段,程序运行后停在INT 3 指令上,此时观察AX寄存器的值为240H,即为9个40H的和。

注:INT 3指令是一条断点中断指令,程序遇到该指令则停止。

5)用T =100命令单步执行,观察IP、CX及AX寄存器的值,分析程序执行过程。

分析:在程序执行到loop时,程序跳转到loop指定的地址继续执行,此时IP变为指定地址,CX减少了1。

按此运行,每经过一次循环ax+40。

直到CX变为0.。

相关文档
最新文档