汇编语言实_验_报_告
汇编语言实验报告

汇编语⾔实验报告福建农林⼤学⾦⼭学院(程序设计类课程)实验报告课程名称:汇编语⾔姓名:系:专业:年级:学号:指导教师:职称:2010~2011学年第⼆学期实验项⽬列表福建农林⼤学⾦⼭学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语⾔实验室号:_ _1#605 实验设备号: I3 实验时间: 2011.4.25 指导教师签字:成绩:实验⼀汇编程序的汇编及运⾏1.实验⽬的和要求(1)熟悉汇编程序的汇编、连接、执⾏过程;(2)⽣成LST⽂件,查看LST⽂件;(3)⽣成OBJ⽂件,修改语法错误;(4)⽣成EXE⽂件;(5)执⾏程序。
2.实验环境IBM—PC机及其兼容机;实验的软件环境是:操作系统:DOS 2.0以上;调试程序:/doc/aa5b4424a5e9856a56126062.html ;⽂本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引⽤程序:CREF.EXE(可有可⽆)。
3.实验内容及实验数据记录(1)将数据段输⼊,取名1.txt,保存在MASM⽂件夹下。
⽣成LST⽂件,(不必连接、运⾏)⽤EDIT查看1.LST⽂件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DATA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输⼊有错误的⽂件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运⾏。
)DATA SEGMENTVAR1 DB 0, 25, ODH, 300VAR2 DB 12H, A4H, 6BHVAR3 DB ’ABCDEF’VAR4 DW 1234H, 5678HVAR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DATABEING MOV AX, DATAMOV DS, AXLEA SI, VAR5MOV BX, OFFSET VAR2MOV [SI], 0ABHMOV AX, VAR1+2MOV [BX], [SI]MOV VAR5+4, VAR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输⼊正确的程序,汇编、连接、运⾏STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DATASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.算法描述及实验步骤1) ⾸先,⽤记事本输⼊各段程序,并储存成源程序,保存在MASM⽬录下。
汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 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)输入程序并汇编
_A100
0B03:0100 MOV DL,33
0B03:0102 MOV AH,2
0B03:0104 INT 2l
“0B03:0100”类似这样的地址是系统自动提供的,不需用户输入。至此程序已输入完毕,并汇编成机器指令。现在用G命令运行程序如下:
(2)运行程序
_G
3
Program terminated normally
编程思路(仅供参考):
该题目要求掌握运算中带符号数和无符号数运算的区别。本题目只考虑有符号数情况
参考程序清单:ABC.ASM
DATA SEGMENT
X DB1;x 单元存放数字1,以下类推
Y DB4
Z DB3
WDB?,? ;预留2个单元,存放运算结果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
INT 21H
:
当要执行INT 21H这条指令时,若用T命令进行跟踪,则进入INT 21H程序(DOS功能调用)后,需要数十次T命令才能返回当前程序;若采用P命令进行调试,则只执行INT 21H一条指令,执行完立即返回,给调试者的感觉好象是执行了一条普通指令一样。因此,当读者以后遇到CALL、INT n指令或带重复前缀的数据串操作指令时,若不想观察相应过程的详细执行过程,就可以用P命令。
若是0则为偶数若为2则为奇数可以采用test指令和条件转移指令jz来实现在内存中以buf单元开始缓冲区中连续存放着10个学生的分数试编制程序统计英中90100分8089分6079分及60分以下少人并把结果分别存放在s9s8s7和s6试编制程序从键盘输入学生成绩abcd自动汇总并显示各类分数的人数假定各类分数的总人数在0止输入
Keil 的使用与汇编语言上机操作 实验报告

实验名称 Keil 的使用与汇编语言上机操作指导教师罗志祥专业班级光电1406 姓名段昳晖学号 U2014***** 联系电话 137******一、任务要求1.掌握Keil环境的使用1)字节拆分、合并:调试e421.asm程序,观察相关寄存器和单元的内容。
2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。
2. 编写多个十六位数的加法程序有4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高八位在后。
要求:和存于R3(高八位)和R2(低八位),进位位存于R4.二、设计思路1.掌握Keil环境的使用1)字节拆分、合并利用汇编语言中的XCHD和SWAP两个语句来实现将八位二进制数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD码与30H相或(加上30H)得到ASCII 码。
将两个ASCII码和0FH相与(高四位清零)得到BCD码,利用SWAP语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。
2)数据块填充将R0用作计数器,DPTR用作片外数据指针,A作为原始数据来源,依顺序在片外的存储单元内容填充数据。
利用循环语句来减少程序长度,并控制填充单元个数为片外100H个。
利用RO的进位实现,当且仅当RO=00H时,结束循环赋值过程,此时R0已经经历了从00H-0FFH的过程,即计数周期为100。
同时赋值循环也历经了一百次,完成了将片外RAM 7000H-70FFH单元按数据依次递增规律的填充。
2.多个十六位数的加法程序以2个十六位无符号数相加为基础,将输入的4个无符号数(以a、b、c、d代表),两两相加,所得的2个和,再作为加数,求和,得到4个数的和。
其中需要注意的是进位的处理。
四数求和进位,不仅有两和数相加产出的进位还要加上产生两和数时的进位。
其中2个十六位无符号数相加的原理为,先对两数低位求和,提取出其进位,加到两数高位和中,并将高位求和进位,即两数求和进位保存下来。
北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。
寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。
汇编实验一实验报告

汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一DEBUG 程序使用技巧1.寄存器和内存开始Debug 程序。
输入“Q ” 退出程序。
再次启动Debug。
输入“r ”来显示CPU的当前状态和寄存器中的当前内容。
输入“r AX ”和“1234”,AX 寄存器中的内容变为1234。
输入“r DS ”和“2000”,DS 寄存器中的内容变为2000。
输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里:输入“f DS:1000 1100 77 ”再显示一次这80H 字节。
判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输入“d 2000:1000 ”来显示数据段中80H 字节数据。
观察与前面的数据有无不同。
输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。
比较其中2000:0000 段中的数据。
相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
答:相同段落中的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
2.输入机器码,使用单步和断点退出Debug,再重新启动Debug。
输入“r ”观察CPU 的状态,下一条指令是什么?答:下一条指令是ADD [BX+SI],AL使用两种方式输入一段程序,第一种方式:直接输入机器码。
输入“u ”来显示程序段中的指令序列。
然后输入“d CS:100 ” 来显示代码段中的数据。
观察显示内容。
“u CS:100 106 ”做反汇编,就是显示出汇编语句。
将这几句汇编语句记录下来:使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。
注意,跟踪程序前,要让IP 寄存器中的值是100H。
一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。
汇编语言实验报告_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一.实验目的熟练掌握字符的输入二.实验原理DOS调用的1号功能三.实验内容code segmentassume cs:codestart:mov ah,1;输入并回显int 21hmov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论:用2号功能也可以得相同结果六.实验心得学会了字符的输入功能七.参考文献汇编课本八.技术支持韩阳老师~习题2一.实验目的熟练掌握字符的显示输出二.实验原理DOS调用的2号功能三.实验内容code segmentassume cs:codestart:mov dl,'T' ;调用2号功能输出字符mov ah,2int 21hmov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论:不用数据段直接输出即可六.实验心得学会了字符的输出功能七.参考文献汇编课本八.技术支持韩阳老师~习题3一.实验目的熟练掌握字符串的显示输出二.实验原理DOS调用的9号功能三.实验内容datas segmentstr db'how are you?$'datas endscodes segmentassume cs:codes ,ds:datasstart:mov ax,datas ;将数据地址送入ds mov ds,axlea dx,strmov ah,09 ;调用9号功能显示字符串int 21hmov ah,4chint 21hcodes endsend start四.结果与分析结果正确,符合题目要求五.问题讨论:用数据段直接输出即可六.实验心得学会了字符串的输出功能七.参考文献汇编课本八.技术支持韩阳老师~习题4一.实验目的熟练掌握大小写字母的转换和判断语句的调用二.实验原理用ASCII码值来判断大小写,用跳转语句来完成相应的操作三.实验内容datas segmentstr db'ERROR$' ;用来显示错误信息CRLF DB 0AH,0DH,"$" ;用来显示换行和回车datas endscode segmentassume cs:code,ds:datasstart:mov ah,01Hint 21Hpush ax ;保存输入的ax值mov ax,datasmov ds,axLEA DX,CRLFMOV AH,9INT 21Hpop ax ;取出输入的ax值比较cmp al,61H ;比最小的小写字母还小jl lop2cmp al,7aH ;比最大的小写字母还大jg lop2sub al,20H ;小写转大写mov dl,almov ah,2int 21hjmp exitlop2:lea dx,str ;不满足条件显示错误信息mov ah,09int 21hexit:mov ah,4chint 21hend start四.结果与分析结果正确,符合题目要求五.问题讨论:有ax先输入用栈保存的问题和最后大小写做完无条件跳转的问题六.实验心得判断语句的用法七.参考文献汇编课本八.技术支持韩阳老师~习题5一.实验目的熟练掌握循环语句的调用二.实验原理用cx中的值来确定循环的次数code segment assume cs:code start:mov cx,10 ;循环的次数 start_loop:mov dl,'F' ;显示输出 mov ah,2 int 21hmov ah,4ch int 21h code ends end start四.结果与分析结果正确,符合题目要求五.问题讨论 Cx 的用法 六.实验心得循环语句的用法 七.参考文献汇编课本 八.技术支持韩阳老师~ 习题6一.实验目的熟练掌握循环语句的调用和判断选择语句的调用用cx中的值来确定循环的次数和用cmp来确定后续操作三.实验内容code segmentassume cs:codestart:mov ah,01Hint 21Hcmp al,61H ;判断是否是“a”je lop1cmp al,62H ;判断是否是“b”je lop2mov ah,4chint 21hlop1:mov cx,10 ;打印10个“*” start_loop1:mov dl,'*'mov ah,2int 21hloop start_loop1mov ah,4chint 21hlop2:mov cx,10 ;打印10个“$” start_loop2:mov dl,'$'mov ah,2int 21h四.结果与分析结果正确,符合题目要求五.问题讨论判断选择语句的用法六.实验心得判断选择语句的用法七.参考文献汇编课本八.技术支持韩阳老师~习题7一.实验目的熟练掌握串中大小写的判断和转换二.实验原理用cmp进行大小写判断,再用加减做处理三.实验内容code segmentassume cs:codestart:mess1 db 'holle world' ;定义输入的串count equ $-mess1mov cx,countmov si,-1start_loop:inc sisub mess1[si],20H ;大小写转换mov dl,mess1[si]mov ah,02Hint 21Hloop start_loopmov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得串中各个字符的操作七.参考文献汇编课本八.技术支持韩阳老师~习题8一.实验目的综合运用字符串输出,判断,大小写转换等功能二.实验原理前几次要点的综合运用三.实验内容datas segment ;显示要输出的信息mess1 db 'Please input one character:$'mess2 db 'error!$'datas endscode segmentassume cs:code,ds:datasstart:mov cx,3mov ax,datasmov ds,axlea dx,mess1 ;显示输入提示mov ah,09Hint 21hmov ah,07Hint 21hcmp al,61H ;判断是否为小写字母jl lop2cmp al,7BHjge lop2dec almov dl,alstart_loop:mov ah,02H ;满足就显示3个字母int 21hinc dlloop start_loopjmp next ;程序运行完退出lop2:mov ax,datasmov ds,axlea dx,mess2 ;不满足显示错误信息mov ah,09Hint 21hmov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得对前面的各种操作掌握的更熟悉了七.参考文献汇编课本八.技术支持韩阳老师~习题9一.实验目的对数字的判断和处理二.实验原理用ASCII码来判断数字三.实验内容datas segmentmess1 db 100 dup(?) ;定义存储的区域datas endscode segmentassume cs:code,ds:datasstart:mov si,-1mov cx,100start_loop:mov ah,01Hint 21Hcmp al,0DH ;以换行和回车作为结束的标志je nextcmp al,0AHje nextcmp al,'0'je start_loop ;判断是否为数字cmp al,'1'je start_loopcmp al,'2'je start_loopcmp al,'3'je start_loopcmp al,'4'je start_loopcmp al,'5'je start_loopcmp al,'6'je start_loopcmp al,'7'je start_loopcmp al,'8'je start_loopcmp al,'9'je start_loopinc simov mess1[si],al ;只记录数字loop start_loopnext:mov dl,0AHmov ah,02Hint 21hinc simov cx,simov si,-1start_loop2:inc simov dl,mess1[si] ;显示输出没有数字的串mov ah,02Hint 21H四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得对前面的各种操作掌握的更熟悉了七.参考文献汇编课本八.技术支持韩阳老师~习题10一.实验目的熟练掌握字符串的匹配二.实验原理一个一个字符的比较三.实验内容datas segment ;显示提示信息mess1 db 'Please input the password:$'mess2 db 'Password error!$'mess3 db '0000000000000000000000'mess4 db '123456' ;这就是密码,不要告诉别人哦~ mess5 db 'Welcome to use!$'count db 3datas endscode segmentassume cs:code,ds:datasstart:mov si,-1mov cx,100mov ax,datasmov ds,axlea dx,mess1 ;显示提示信息mov ah,09Hint 21hmov dl,0AHmov ah,02Hint 21hjmp start_loop1 ;记录密码next1:dec countmov cx,100mov ax,datasmov ds,axlea dx,mess2mov ah,09Hint 21hcmp count,0je next2 ;三次不对则退出mov dl,0AHmov ah,02Hint 21hmov si,-1start_loop1: ;记录密码输出“*”mov ah,07Hint 21hcmp al,0DH ;如果是“换行”“回车”就结束je next0cmp al,0AHje next0inc simov mess3[si],almov dl,'*'mov ah,02Hint 21Hloop start_loop1next0:mov dl,0AHmov ah,02Hcmp si,5 ;只有输入字符是六个才比较jg next1cmp si,5jl next1int 21hmov cx,6mov si,-1mov al,0start_loop2: ;比较输入的字符和密码inc simov al,mess3[si]cmp al,mess4[si]jne next1loop start_loop2mov ax,datas ;比较成功就退出mov ds,axlea dx,mess5mov ah,09H Array int 21hmov ah,07Hint 21hnext2:mov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论对每次储存输入的缓冲区的清零六.实验心得数据要覆盖的彻底七.参考文献汇编课本八.技术支持韩阳老师~习题11一.实验目的熟练掌握字符串的输入,存储和输出二.实验原理开辟一个存储区,输入一个存一个三.实验内容datas segmentmess1 db 100 dup(?) ;用于存放数据datas endscode segmentassume cs:code,ds:datasstart:mov si,-1mov cx,100start_loop: ;输入要存入的数据mov ah,01Hint 21Hcmp al,0DH ;以回车作为结束信号je nextinc simov mess1[si],alloop start_loopnext:mov dl,0AHmov ah,02Hint 21hinc simov cx,simov si,-1start_loop2: ;显示输出inc simov dl,mess1[si]mov ah,02Hint 21Hloop start_loop2code endsend start四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得数据区要开辟的足够大七.参考文献汇编课本八.技术支持韩阳老师~习题12一.实验目的熟练掌握清屏操作二.实验原理调用BIOS的6号功能三.实验内容code segmentassume cs:codestart:mov al,0mov bh,10Hmov ch,0mov cl,0mov dh,24mov dl,79mov ah,6 ;相当于在整个窗口范围里开一个蓝色区域int 10Hmov ah,4chint 21Hend start四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得其实蓝屏很简单七.参考文献汇编课本八.技术支持韩阳老师~习题13一.实验目的熟练掌握BIOS调用,和字符串的显示二.实验原理调用BIOS的6号功能和13号功能三.实验内容data segmentmess1 db 'I LOVE YOU'count equ $-mess1n db 5m db 9data endscode segmentassume cs:code,ds:datastart:mov ds,axmov al,0mov bh,00Hmov ch,0mov cl,0mov dh,24mov dl,79mov ah,6 ;用黑色清屏int 10Hmov ah,07Hint 21Hstart_loop1: ;显示5个“I love you”mov ax,datamov ds,axmov bp,seg mess1mov es,bpmov bp,offset mess1mov cx,countinc mmov dh,mmov dl,33mov bl,8FHmov al,0mov ah,13Hint 10Hdec ncmp n,0 ;确定显示完jne start_loop1start_loop2:mov ah,0int 16Hcmp ah,01h ;判断是否为escjne start_loop2mov ah,4chcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论其中用到了光标的重置六.实验心得闪烁只有在xp的全屏模式下才能显示七.参考文献汇编课本八.技术支持韩阳老师~习题14一.实验目的熟练掌握BIOS调用,和字符的显示还有颜色的配色二.实验原理调用BIOS的9号功能三.实验内容codes segmentmain proc farassume cs:codesstart:mov bh,0mov cx,10 Array mov al,'Y'mov bl,14mov ah,9int 10hcall displaymov al,'A'mov bl,4mov ah,9int 10hcall displaymov al,'N'mov bl,2mov ah,9int 10hcall displaymov al,'G'mov bl,1mov ah,9int 10hmov ah,4chint 21hmain endpdisplay proc nearmov ah,2mov dl,0ahint 21hmov ah,2mov dl,0dhint 21hretdisplay endpcodes endsend start四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得用BIOS显示字符,重复的容易实现七.参考文献汇编课本八.技术支持韩阳老师~习题15一.实验目的熟练掌握数据的传送、转换和拼接二.实验原理一个一个的改变三.实验内容data segmentbuff db 0,1,2,3,4,5,6,7,8,9asc db 'ASC',10 dup(?)data endscodes segmentassume cs:codes,ds:datastart:mov ax,datamov ds,axmov cx,10mov si,-1mov di,2start_loop1:inc simov dl,buff[si]add dl,30H ;将数字转成对应ASCII码值inc dimov asc[di],dl ;将转好的值送入asc中loop start_loop1mov si,-1mov cx,13start_loop2:inc silea dx,ascmov dl,asc[si]mov ah,2int 21hloop start_loop2mov ah,4chint 21hcodes endsend start四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得比较简单基本上没有什么过的的分支七.参考文献汇编课本八.技术支持韩阳老师~习题16一.实验目的实现两个存储区的数据传送二.实验原理建立一个空的存储区,用来存放过度的数据三.实验内容datas segmentmess1 db 'abc',20 dup(?)mess2 db 'defg',20 dup(?)mess3 db 50 dup(?)datas endscodes segmentassume cs:codes,ds:datasstart:mov cx,30mov si,-1start_loop1:inc simov dl,mess1[si] ;将1的数据给3 mov mess3[si],dlloop start_loop1mov cx,30mov si,-1start_loop2:inc simov dl,mess2[si] ;将2的数据给1 mov mess1[si],dlloop start_loop2mov cx,30mov si,-1start_loop3:inc simov dl,mess3[si] ;将3的数据给2 mov mess2[si],dlmov ah,4chint 21hcodes endsend start四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得这是一个典型的用空数据区做桥梁交换的方法七.参考文献汇编课本八.技术支持韩阳老师~习题17一.实验目的多字符串的输出二.实验原理重复输出一个字符串三.实验内容datas segmentdata db 'HELLO$'datas endsassume cs:codes,ds:datasstart:mov ax,datasmov ds,axmov cx,4 ;先只显示4个start_loop:lea dx,datamov ah,9int 21hmov ah,2mov dl,0ahint 21hmov ah,2mov dl,0dhint 21hloop start_loop 2lea dx,data ;显示第5个,后面没有换行和回车mov ah,9int 21hmov ah,4chint 21hcodes endsend start四.结果与分析结果正确,符合题目要求五.问题讨论最后一个没有回车换行应单独输出六.实验心得多字符串重复输出七.参考文献汇编课本八.技术支持韩阳老师~习题18一.实验目的熟练的掌握对屏幕的操作二.实验原理用BIOS的清屏功能三.实验内容assume cs:code start:mov al,0mov bh,20h Array mov ch,0mov cl,0mov dh,12mov dl,39mov ah,6int 10hmov al,0mov bh,70hmov cl,39mov ch,0mov dh,12mov dl,79mov ah,6 int 10hmov al,0mov bh,70hmov cl,0mov ch,13mov dh,24mov dl,39mov ah,6int 10hmov al,0mov bh,20hmov cl,39mov ch,13mov dh,24mov dl,79mov ah,6int 10hmov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论要能准确的定位矩形的角六.实验心得矩形的清屏很容易控制七.参考文献汇编课本八.技术支持韩阳老师~习题19一.实验目的字符的匹配和分类统计二.实验原理利用ASCII码的特点逐渐缩小范围,最终统计出值三.实验内容pr macro dat1,dat2call enterlea dx,dat1mov ah,09hint 21hsub ax, axmov al, dat2call displayendmdata segment 用来存放输出的信息nn db 0ln db 0on db 0mess1 db 'ln:$'mess2 db 'nn:$'mess3 db 'on:$'data endsmain proc farcode segmentassume cs:code,ds:datastart:mov ax,0fff0h ;确定统计的范围mov es,axmov ax,datamov ds,axmov si,0000hmov cx,100lp1:mov dl,es:[si]jl othercmp dl,39Hjg lp2inc nn ;统计数字jmp lp4lp2:cmp dl,41Hjl othercmp dl,5AHjg lp3inc ln ;统计字母jmp lp4lp3:cmp dl,61Hjl othercmp dl,7AHjg otherinc lnjmp lp4other:inc onlp4:inc siloop lp1pr mess1,lnpr mess2,nnpr mess3,onmov ah,4chint 21hmain endpenter proc nearmov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hretenter endpdisplay proc near ;将数字转换为对应的ASCII码值mov bl, 10div blpush axmov dl, alret四.结果与分析结果正确,符合题目要求五.问题讨论找到规律有耐心的逐步分析六.实验心得对分支条件掌握的更加熟练了七.参考文献汇编课本八.技术支持韩阳老师~习题20一.实验目的十六进制数变ASCII码二.实验原理遇到“A、B、C、D、E、F”时分类讨论三.实验内容data segmentmess db 2 dup(?)data endscode segmentassume cs:code,ds:datastart:mov cx,2mov si,-1lp:inc simov ah,01Hint 21Hmov mess[si],alloop lpcmp mess[si],'A' ;大于10的时候就特殊处理jge displaymov ah,2mov dl,0ahint 21hmov ah,2mov dl,0dhint 21hmov dl,30Hmov ah,02Hint 21hmov dl,mess[si]mov ah,02Hint 21h Array mov ah,4chint 21hdisplay:mov ah,2mov dl,0ahint 21hmov ah,2mov dl,0dhint 21hmov dl,31Hmov ah,02Hint 21hmov al,mess[si]sub al,11Hmov dl,almov ah,02Hint 21hmov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论无六.实验心得对数字转换更熟练了七.参考文献汇编课本八.技术支持韩阳老师~习题21一.实验目的完全熟练的掌握对图形和光标的操作二.实验原理BIOS功能调用三.实验内容proint macro dat1,dat2,dat3mov bh,dat1mov dh,dat2mov dl,dat3mov ah,2int 10hendmwindows macro opr1,opr2,opr3,opr4,opr5,opr6mov al,opr1mov ch,opr2 Array mov cl,opr3mov dh,opr4mov dl,opr5mov bh,opr6mov ah,6int 10hendmcode segmentassume cs:codestart:windows 0,0,0,24,79,70Hwindows 0,7,19,19,51,32Hwindows 0,8,20,18,50,70Hproint 0,18,20lp:mov cx,30lp0:mov ah,01hint 21hcmp al,1bHje exitloop lp0windows 1,8,20,18,50,70Hproint 0,18,20jmp lpexit:mov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论在输入回车时要进行特殊判断,防止其变到第一行六.实验心得对BIOS调用掌握的熟练了七.参考文献汇编课本八.技术支持韩阳老师~习题22一.实验目的对字符串的超级综合运用二.实验原理前面的各种原理三.实验内容datas segmentmess1 db 'Enter keyword:$'mess2 db 'Enert sentence:$'mess3 db 'Match at location:$'mess4 db 'No match!$'mess5 db 'H of the sentence$'self db 200,200 dup(?)key db 100,100 dup(?)count_start db 0;字符的位置CRLF DB 0AH,0DH,"$"datas endscode segmentassume cs:code,ds:datasstart:mov ax,datasmov ds,axlea dx,mess1mov ah,09Hint 21hMOV AH,0AHLEA DX,self ;先输入key INT 21HLEA DX,CRLFMOV AH,9INT 21Hsentence:lp:dec count_startcmp count_start,0jne lpmov ax,datasmov ds,axlea dx,mess2mov ah,09Hint 21hMOV AH,0AHLEA DX,key ;在输入self INT 21HLEA DX,CRLFMOV AH,9INT 21Hsub cx,cxMOV cl,key+1MOV DL,self+1LEA SI,key+2LEA DI,self+2NEXT: MOV AL,[SI]MOV BL,[DI]cmp al,0dHje exitCMP AL,BLJE MATCHinc siagain:LEA DI,self+2inc count_startLOOP NEXTjmp no_onematch:match1:inc siinc diMOV AL,[SI]MOV BL,[DI]cmp al,bljne againdec dlcmp dl,1jne match1;找到了;完全匹配成功mov ax,datasmov ds,axlea dx,mess3mov ah,09Hint 21hmov al,count_startcmp al,10jge change1add al,31Hmov dl,almov ah,02Hint 21Hjmp gochange1: ;位置的数字转ASCII码cmp al,15jg change2add al,36Hmov dl,almov ah,02Hint 21Hjmp gochange2:mov dl,'1'mov ah,02Hint 21Hsub al,16add al,31Hmov dl,almov ah,02Hint 21Hgo:mov ax,datasmov ds,axlea dx,mess5mov ah,09Hint 21hLEA DX,CRLFMOV AH,9INTjmp sentencemov ah,4chint 21hno_one: ;没有匹配的mov ax,datasmov ds,ax Array lea dx,mess4mov ah,09Hint 21hLEA DX,CRLFMOV AH,9INT 21Hjmp sentenceexit:mov ah,4chint 21hcode endsend start四.结果与分析结果正确,符合题目要求五.问题讨论我认为主要的问题是在重复输入查找和判断的时候要将原有的数据区中的数据清零,这样才不会受原来数据的影响六.实验心得要有耐心对每个bug一点点解决七.参考文献汇编课本八.技术支持韩阳老师~习题23一.实验目的掌握声程序二.实验原理三.实验内容datas segmentmus_freg dw 330,294,262,294,3 dup(330)dw 3 dup(294),330,392,392dw 330,294,262,294,4 dup(330)dw 294,294,330,294,262,-1mus_time dw 6 dup(25),50dw 2 dup(25,25,50)dw 12 dup(25),100datas endsstacks segmentstacks endscodes segmentassume cs:codes,ss:stacks,ds:datasmusic proc farmov ax,datasmov ds,axlea si,mus_freglea bp,ds:mus_timefreq:mov di,[si]cmp di,-1je end_mus ;整个音乐放完mov bx,ds:[bp]call soundfadd si,2add bp,2jmp freqend_mus:mov ax,4c00hint 21hmusic endpsoundf proc near ;发声的主程序push axpush bxpush cxpush dxpush dimov al,0b6hout 43h,almov dx,12hmov ax,348ch Array div diout 42H,almov al,ahout 42h,alin al,61hmov ah,alor al,3out 61h,alwait1:mov cx,4000call waitfdec bxjnz wait1mov al,ahout 61h,alpop dipop dxpop cxpop bxpop axretsoundf endpwaitf proc nearpush axwaitf1:in al,61hand al,10hje waitf1mov ah,alloop waitf1pop axretwaitf endpcodes endsend music四.结果与分析结果正确,符合题目要求五.问题讨论直接调用计算机硬件,延迟自己写,其余和书上一样六.实验心得学会了系统发声,基本上是书上的格式七.参考文献汇编课本,百度八.技术支持韩阳老师~习题25同21。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六、运行结果:
-t AX=0078 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0005 DI=0000 DS=1439 ES=1429 SS=1439 CS=143A IP=0016 NV UP EI PL NZ NA PE NC 143A:0016 B8004C MOV AX,4C00
实 验 报 告
计 算 机 组 成 原 理 汇 编 语 言
专业: 班级: 学号: 姓名: 计算机科学与技术
实 验 报 告
课程名称: 姓名 实验名称 计算机组成原理 学号 组员 程序一:一维数组的积
实验内容:(实验原理、实验步骤、数据处理、误差分析、程序算法、系统结构等)
一、 二、 分析思路: 实验步骤: 利用循环体,并设置循环控制变量 (1) 确定算法,画出流程图 (2) 利用文本编辑程序,建立源文件 (3) 利用汇编程序 MASM 对源程序汇编,形成目标文件 (4) 利用汇编程序 LINK 对目标文件进行连接,形成可执行文件 (5) 运行可执行文件。如果有错误,利用 DEBUG 软件进行调试 三、 程序流程图:
CX=0001 DX=0000 SP=0000 BP=0000 SI=0004 DI=0000 SS=1439 CS=143A IP=000E NV UP EI PL NZ NA PO NC MUL BYTE PTR [SI] (第 5 次乘) CX=0001 DX=0000 SP=0000 BP=0000 SI=0004 DI=0000 SS=1439 CS=143A IP=0010 NV UP EI PL NZ NA PE NC INC SI
code ends end begin
Hale Waihona Puke 五、调试过程:通用寄存器(AX:累加器 BX:基址寄存器 CX 计数器 DX:数据寄存器) 专用寄存器( SP:堆 栈指针寄存器 BP:基数指针~ SI 源变址~ DI:目的变址~ IP:指令~)段寄存器(DS:数据段 ES 扩展数 据段 SS:堆栈段 CS:代码段) -t AX=1439 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1429 ES=1429 SS=1439 CS=143A IP=0003 NV UP EI PL NZ NA PO NC 143A:0003 8ED8 MOV DS,AX -t AX=1439 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1439 ES=1429 SS=1439 CS=143A IP=0005 NV UP EI PL NZ NA PO NC 143A:0005 33C0 XOR AX,AX (清零) -t AX=0000 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1439 ES=1429 SS=1439 CS=143A IP=0007 NV UP EI PL ZR NA PE NC 143A:0007 40 INC AX -t AX=0001 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1439 ES=1429 SS=1439 CS=143A IP=0008 NV UP EI PL NZ NA PO NC 143A:0008 B90500 MOV CX,0005 (设置循环次数) -t AX=0001 BX=0000 CX=0005 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1439 ES=1429 SS=1439 CS=143A IP=000B NV UP EI PL NZ NA PO NC 143A:000B BE0000 MOV SI,0000 (MOV SI,OFFSET DA ←SI 中放入 DA 的偏移 量) -t AX=0001 BX=0000 CX=0005 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1439 ES=1429 SS=1439 CS=143A IP=000E NV UP EI PL NZ NA PO NC 143A:000E F624 MUL BYTE PTR [SI] (乘法指令 ) DS:0000=01
DS:0004=05
CX=0001 DX=0000 SP=0000 BP=0000 SI=0005 DI=0000 SS=1439 CS=143A IP=0011 NV UP EI PL NZ NA PE NC LOOP 000E 若 CX 的值为 0 则结束循环 CX=0000 DX=0000 SP=0000 BP=0000 SI=0005 DI=0000 SS=1439 CS=143A IP=0013 NV UP EI PL NZ NA PE NC MOV [0005],AX DS:0005=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0005 DI=0000 SS=1439 CS=143A IP=0016 NV UP EI PL NZ NA PE NC MOV AX,4C00 CX=0000 DX=0000 SP=0000 BP=0000 SI=0005 DI=0000 SS=1439 CS=143A IP=0019 NV UP EI PL NZ NA PE NC INT 21 CX=0000 DX=0000 SP=FFFA BP=0000 SI=0005 DI=0000 SS=1439 CS=00A7 IP=107C NV UP DI PL NZ NA PE NC NOP
CX=0005 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 SS=1439 CS=143A IP=0010 NV UP EI PL NZ NA PO NC INC SI CX=0005 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000 SS=1439 CS=143A IP=0011 NV UP EI PL NZ NA PO NC LOOP 000E (开始第 1 次循环) CX=0004 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000 SS=1439 CS=143A IP=000E NV UP EI PL NZ NA PO NC MUL BYTE PTR [SI] (第 2 次乘) CX=0004 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000 SS=1439 CS=143A IP=0010 NV UP EI PL NZ NA PO NC INC SI CX=0004 DX=0000 SP=0000 BP=0000 SI=0002 DI=0000 SS=1439 CS=143A IP=0011 NV UP EI PL NZ NA PO NC LOOP 000E (开始第 2 次循环) CX=0003 DX=0000 SP=0000 BP=0000 SI=0002 DI=0000 SS=1439 CS=143A IP=000E NV UP EI PL NZ NA PO NC MUL BYTE PTR [SI] (第 3 次乘) CX=0003 DX=0000 SP=0000 BP=0000 SI=0002 DI=0000 SS=1439 CS=143A IP=0010 NV UP EI PL NZ NA PE NC INC SI CX=0003 DX=0000 SP=0000 BP=0000 SI=0003 DI=0000 SS=1439 CS=143A IP=0011 NV UP EI PL NZ NA PE NC LOOP 000E (开始第 3 次循环)
四、
参考程序清单: ;数据段 ;定义变量是 8 位 ;定义变量是 16 位 ;代码段 ;伪指令:ds 是数据段,cs 是代码段
2
Data segment Da db 1,2,3,4,5 result DW ? Data Ends code segment assume ds:data,cs:code begin:
DS:0003=04
4
AX=0018 BX=0000 DS=1439 ES=1429 143A:000E F624 -t AX=0078 BX=0000 DS=1439 ES=1429 143A:0010 46 -t AX=0078 BX=0000 DS=1439 ES=1429 143A:0011 E2FB AX=0078 BX=0000 DS=1439 ES=1429 143A:0013 A30500 -t AX=0078 BX=0000 DS=1439 ES=1429 143A:0016 B8004C -t AX=4C00 BX=0000 DS=1439 ES=1429 143A:0019 CD21 -t AX=4C00 BX=0000 DS=1439 ES=1429 00A7:107C 90
3
-t AX=0001 BX=0000 DS=1439 ES=1429 143A:0010 46 -t AX=0001 BX=0000 DS=1439 ES=1429 143A:0011 E2FB -t AX=0001 BX=0000 DS=1439 ES=1429 143A:000E F624 -t AX=0002 BX=0000 DS=1439 ES=1429 143A:0010 46 -t AX=0002 BX=0000 DS=1439 ES=1429 143A:0011 E2FB -t AX=0002 BX=0000 DS=1439 ES=1429 143A:000E F624 -t AX=0006 BX=0000 DS=1439 ES=1429 143A:0010 46 -t AX=0006 BX=0000 DS=1439 ES=1429 143A:0011 E2FB -t AX=0006 BX=0000 DS=1439 ES=1429 143A:000E F624 -t AX=0018 BX=0000 DS=1439 ES=1429 143A:0010 46 -t AX=0018 BX=0000 DS=1439 ES=1429 143A:0011 E2FB -t