01实验一:用汇编语言实现字符串的显示
- 格式:ppt
- 大小:230.50 KB
- 文档页数:13
汇编语言---字符串操作指令汇编语言---字符串操作指令字符串操作指令的实质是对一片连续的存储单元进行处理,这片连续的存储单元由隐含指针DS:SI或ES:DI来指定;字符串操作指令可对内存单元按照字节、字、双字进行处理,并能根据操作对象的字节数使变址寄存器SI/DI增加或减少1、2、4字节;规定如下:A.当DF=0时,变址寄存器SI/DI增加1、2、4字节;即:变址寄存器SI/DI递增的步长可以是1、2、4字节;B.当DF=1时,变址寄存器SI/DI减少1、2、4字节;即:变址寄存器SI/DI递减的步长可以是1、2、4字节;一、取字符串数据指令(Load String Instruction)从指针DI:SI所指定的内存单元开始,取一个字节/字/双字,然后存入到AL/AX/EAX中,并根据标志位DF的值对寄存器SI 做相应的增减;把存放字符串数据的连续存储区当做是数据源,使用寄存器SI;该指令的执行不会影响任何标志位;指令格式: LODS 地址表达式LODSB/LODSW 地址表达式LODS 地址表达式;80386+在指令LODS中,它会根据"地址表达式"的属性来决定读取一个字节、字或双字;即:当该地址表达式的属性为字节、字或双字时,将从指针DI:SI处读取一个字节到AL中,或读取一个字到AX中,或读取一个双字到EAX中,与此同时,SI还将分别增减1、2、4字节;取字符串数据指令的功能示意图如下图所示:二、置字符串数据指令(Store String Instruction)该指令把寄存器AL/AX/EAX中的值存入指针ES:DI所指向内存单元开始的一片存储单元中,并根据标志位DF的值对寄存器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地,使用寄存器DI;该指令的执行并不会影响任何标志位;指令格式: STOS 地址表达式STOSB/STOSW 地址表达式STOSD 地址表达式;80386+置字符串数据指令的功能示意图如下图所示:三、字符串传送指令(Move String Instruction)该指令把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向的内存单元,并根据标志位DF的值对寄存器DI 和SI分别作相应的增减;该指令的执行并不会影响任何标志位;指令格式: MOVS 地址表达式1,地址表达式2MOVSB/MOVSW 地址表达式1,地址表达式2MOVSD 地址表达式1,地址表达式2 ;80386+字符串传送指令的功能示意图如下图所示:四、输入字符串指令(Input String Instruction)该指令是从某一指定端口接受一个字符串,并存入到一片连续的存储单元中;输入端口由寄存器DX指定,存储单元的首地址由指针ES:DI 来确定,读入的数据个数由寄存器CX来确定;在指令的执行过程中,还要根据标志位DF的值来对寄存器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地;该指令不会影响任何标志位;与指令有关的操作数ES、DI、DX和CX等都是隐含操作数; 指令格式: INS 地址表达式INSB/INSW 地址表达式INSD 地址表达式;80386+五、字符串输出指令(Output String Instruction)该指令是把一个给定的字符串输出到一个指定的端口中;输出端口由通用寄存器DX指定,输出数据的首地址由指针DS:SI确定,输出数据的个数由计数寄存器CX来确定;在指令执行的过程中,还要根据方向标志DF的值来对变址寄存器SI 做相应的增减;该指令的执行并不会影响任何标志位;与指令有关的操作数DS、SI、DX和CX等都是隐含操作数; 指令格式: OUTS 地址表达式OUTSB/OUTSW 地址表达式OUTSD 地址表达式;80386+六、字符串比较指令(Compare String Instruction)该指令是把指针DS:SI所指向的字节、字、双字的值与指针ES:DI 所指向的字节、字、双字的值相减,并用所得到的差来设置相关标志位;与此同时,变址寄存器SI和DI也将根据方向标志位DF的值做相应的增减;指令格式: CMPS 地址表达式1,地址表达式2CMPSB/CMPSW 地址表达式1,地址表达式2CMPSD 地址表达式1,地址表达式2 ;80386+受影响的标志位: AF,CF,OF,PF,SF,ZF字符串比较指令的功能示意图如下图所示:七、字符串扫描指令(Scan String Instruction)该指令是用指针ES:DI所指向字节/字/双字的值与相应的AL/AX/EAX的值相减,并依据所得到的差值来设置相关标志位;与此同时,变址寄存器DI还将根据方向标志DF的值来做相应的增减;指令格式: SCAS 地址表达式SCASB/SCASW 地址表达式SCASD 地址表达式;80386+受影响的标志位: AF,CF,OF,PF,SF,ZF字符串扫描指令的功能示意图如下图所示:八、重复字符串操作指令(Repeat String Instruction)前面的字符串操作指令:取字符串数据、置字符串数据、字符串传送、输入字符串、输出字符串、字符串比较、字符串扫描,等指令,都是执行一次所具有的功能;但是,每个字符串通常都是由多个字符组成的,所以,需要重复执行这些字符串操作指令;为了满足这种需要,指令系统提供了一组重复前缀指令;虽然在这些字符串指令的前面都可以添加一个重复前缀指令,但是由于指令执行结果的差异,对某个具体的字符串指令又不用重复前缀指令而改用其它循环来实现重复的需要;重复字符串操作指令对标志位的影响是由被重复的字符串操作指令来决定;1.重复前缀指令REP(Repeat String Instruction) 重复前缀指令是重复其后指定的字符串操作指令,重复的次数由计数寄存器CX来决定;指令格式:REP LODS/LODSB/LODSW/LODSDREP STOS/STOSB/STOSW/STOSDREP MOVS/MOVSB/MOVSW/MOVSDREP INS/INSB/INSW/INSDREP OUTS/OUTSB/OUTSW/OUTSD重复前缀指令的执行步骤如下:STEP1:判断: CX=0STEP2:如果CX=0,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响相关标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行完后,再转到步骤STEP1;从上面的重复前缀指令格式来看,虽然我们可以使用重复前缀指令来重复取字符串数据指令(第一组指令),但是可能会因为指令的执行结果而在程序中几乎不会使用;例如:编写一段程序,计算字符串"12345abcdefg"中各个字符的ASCII之和;解:......MESS DB '12345abcdefg' ;在数据段进行变量说明......MOV AX,SEG MESSMOV DS,AXLEA SI,MESS ;用DS:SI来指向字符串的首地址;MOV CX,13D ;重复次数XOR BX,BX ;置求和的初值为0REP LODSB ;循环去处字符; ......从程序片段中看,虽然"REP LODSB"能从字符串中逐一取出每个字符,但这个操作是在同一条指令中完成的,程序的其它指令根本无法处理每次取出的字符数据,指令的执行结果是:AL中只保存了最后一次取出的字符'h'的ASCII码;所以,为了实现本例的要求,不能使用重复前缀指令,而要把指令"REP LODSB"改写成如下四条指令:XOR AH,AH ;为后面的累加做准备AGAIN:LODSBADD BX,AX ;AL是被取出的字符,AH已被清0LOOP AGAIN2.条件重复前缀指令(Repeat String Conditionally) 条件重复前缀指令与重复前缀指令的功能相似,所不同的是:条件重复前缀指令中的重复次数不仅由CX来决定,而且还会由标志位ZF的值来决定;根据ZF所起的作用又可分为两种:相等重复前缀指令和不等重复前缀指令;A.相等重复前缀指令:指令格式:REPE/REPZ SCAS/SCASB/SCASW/SCASDREPE/REPZ CMPS/CMPSB/CMPSW/CMPSD该重复前缀指令的执行步骤如下:STEP1:判断条件: CX!=0 且ZF=1STEP2:如果条件不成立,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响任何标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行后,再转到步骤STEP1;B.不等重复前缀指令:指令格式:REPNE/REPNZ SCAS/SCASB/SCASW/SCASDREPNE/REPNZ CMPS/CMPSB/CMPSW/CMPSD该重复前缀指令的执行步骤如下:STEP1:判断条件:CX!=0 且ZF=0STEP2:如果条件不成立,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响任何标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行完后,再转到步骤STEP1;。
微机原理及接口技术实验报告实验项目名称:显示一个字符串实验日期:实验成绩:实验评定标准:一、实验目的1.熟悉汇编语言源程序上机的过程和方法2.掌握宏汇编程序MASM5.1的链接程序LINK3.6的使用方法。
3.了解DEBUG调试汇编语言程序的过程和方法。
二、实验器材电脑、微型计算机原理及应用实验指导书及教科书三、实验内容(实验过程)1.编辑源程序利用文本编辑工具,生成一个汇编程语言程序的纯文本文件ASM。
在汇编源程序中,一行只能写一条语句。
2.汇编源程序3.链接目标程序4.调试可执行程序四、实验程序data segmentmesage db" how do you do" ,0dh,0ah,24hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axlea dx,mesagemov ah,09hint 21hmov ah,4chint 21hcode endsend start四、实验结果及分析分析:在汇编链接目标文件之后执行文件会出现“how do you do”。
若改变mesage db" how do you do" ,0dh,0ah,24h中的how do you do输入你想输出的字符串就可以了。
如果程序执行情况与预期不同,或执行时操作系统报告出错信息,就要通过调试工具进行动态调试,查找程序的问题。
查到问题后,又重回到第一步,重新开始,修改源程序问题。
实验课程名称微型计算机原理实验报告实验项目名称自编程序实验1 专业班级电子信息科学与技术08级1班学生姓名学号实验成绩指导教师签字理学院实验时间:2010年12月6日自编程序实验1 用表格形式显示字符1、题目:用表格形式显示ASCII字符2、实验要求:按15行*16列的表格形式显示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白字符(ASCII码为0)隔开。
3、提示:(1)显示每个字符可使用功能号为2的显示输出功能调用MOV AH,2MOV DL,10H;字符从10H开始,每显示一个DL+1产生下一个字符INT 21H(2)显示空白符时DL=00H;(3)每行显示结束时需要显示回车(ASCII码为0DH)和换行(ASCII码为0AH),本行显示结束后可另起一行显示。
基本实验程序如下:;ASCII.ASMDA TA SEGMENTINFO DB '**This is a display ASCII codesheet.(10H-100H)**',0DH,0AH,'$'DA TA ENDSCODE SEGMENTASSUME DS:DA TA,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFOMOV AH,9INT 21HMOV DX,10HLINE: MOV CL,16CYCLE: MOV AH,2INT 21HINC DXCMP DX,100HJZ DONEPUSH DXMOV AH,2MOV DL,0INT 21HPOP DXDEC CLCMP CL,0JZ NEXTJMP CYCLE| 微型计算机原理实验报告 1NEXT: PUSH DXMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HPOP DXJMP LINEDONE: MOV AH,4CHINT 21HCODE ENDSEND START结果如图所示:加上表格线后的实验程序如下:;ASCII.ASMDA TA SEGMENTINFO DB 0DH,0AH,' **This is a display ASCII codesheet.(10H-100H)**',0DH,0AH,0DH,0AH,'$'DA T1 DB201,205,205,205,209,205,205,205,209,205,205,205,209,205,205,205,209,205,20 5,205,209,205,205,205,209,205,205,205,209,205,205,205,209,'$'DA T2 DB205,205,205,209,205,205,205,209,205,205,205,209,205,205,205,209,205,205,20 5,209,205,205,205,209,205,205,205,209,205,205,205,187,0DH,0AH,'$'DA T3 DB0DH,0AH,200,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205, 2微型计算机原理实验报告|207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,'$'DA T4 DB205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,188,'$'DA TA ENDSCODE SEGMENTASSUME DS:DA TA,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFO ;显示提示信息MOV AH,9INT 21HLEA DX,DAT1 ;显示表格的顶线INT 21HLEA DX,DAT2 ;显示表格的顶线INT 21HMOV DX,10HLINE: PUSH DX ;对DL中的数据保护MOV DL,186 ;显示表格最左边边线MOV AH,2INT 21HMOV DL,0INT 21HPOP DX ;返回DL中的数据MOV CL,16MOV CH,16CYCLE: INT 21H ;显示DL里存的ASCII码字符INC DX ;DX自加,指向下一个字符CMP DX,100H ;与100H比较,看是否是显示完毕JZ DONE ;是,结束程序DEC CHCMP CH,0JZ NEXT0CALL DISP ;调用子程序,显示间隔线NEXT0: DEC CL ;CL自减,用于16个字符显示完毕后换行CMP CL,0JZ NEXTJMP CYCLENEXT: PUSH DXMOV DL,0INT 21HMOV DL,186 ;显示表格最右边边线INT 21H| 微型计算机原理实验报告 3MOV DL,0DH ;回车换行INT 21HMOV DL,0AHINT 21HPOP DXJMP LINEDISP PROCPUSH DXMOV DL,0INT 21HMOV DL,179INT 21HMOV DL,0INT 21HPOP DXRETDONE: MOV DL,0INT 21HMOV DL,186INT 21HLEA DX,DAT3MOV AH,9INT 21HLEA DX,DAT4INT 21HMOV AH,4CHINT 21HCODE ENDSEND START结果如图所示:4微型计算机原理实验报告|| 微型计算机原理实验报告 5。
汇编使⽤10h中断来显⽰字符串特么这个问题困扰了我好久,毕竟是个OS newbie,还没有汇编的基础。
在前天的加载loader的实验中,⽼师要求显⽰字符串,但是给的代码只是显⽰⼀个字符。
愚蠢的我实在没办法,最后为了按期完成实验,只能⼀个个字符地输出,呀真是羞耻。
好了,趁着清明假期,花了⼏个⼩时终于弄懂了。
下⾯进⼊正题!前戏是先对boot.asm和loader.asm编译:nasm -o boot.bin boot.asmnasm -o loader.bin loader.asm然后把boot.bin写⼊软盘a.img:dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc然后三连击,把挂载软盘:最后⼀个参数是你floppy⽂件夹的路径,⾃⼰随便去创建⼀个就好,不⼀定⽤/mnt⾥⾯的sudo mount -o loop a.img /home/jennings/exp2/floppy/sudo cp loader.bin /home/jennings/exp2/floppy/ -vsudo umount /home/jennings/exp2/floppy/重点来了(敲⿊板),以下是loader.asm的代码:org 0100h ; 告诉编译器程序加载到 0100h处mov ax, csmov ds, axmov es, axcall DispStr ; 调⽤显⽰字符串例程jmp $ ; ⽆限循环DispStr:mov ax, LoaderMessagemov bp, ax ; es:bp = 串地址mov cx, 31 ; cx = 串长度mov ax, 01301h ; ah = 13, al = 01hmov bx, 000ch ; 页号为0(bh = 0) ⿊底红字(bl = 0Ch,⾼亮)mov dh, 0;显⽰的⾏号mov dl, 39;显⽰的列号int 10h ; 10h 号中断retLoaderMessage: db "This is Zhengjianning's loader."解释程序:最上⾯的3个mov语句是让ds,es,cs指向同⼀个位置,之后调⽤显⽰字符串的函数,然后程序⽆限循环。
实验一汇编语言程序上机过程以及调试(1)一、预习内容1.工具软件MASM、LINK的使用2.常用DEBUG命令的使用: G,D,R,T,U,Q3.完整程序设计方法的格式。
二、目的要求1.掌握常用工具软件MASM、LINK的使用2.掌握常用DEBUG命令: G,D,R,T,U,Q 能灵活使用这些命令调试程序3.掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
三、实验内容比较两个字符串string1和string2所含的字符是否相同,如果相同则显示’Match'否则显示’No match’.请读程序,并将程序补充完整。
DSEG SEGMENTstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.'mess1 db 'Match.',13,10,'$'mess2 db 'No match.',13,10,'$'DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG, es:DSEG,MAIN PROC FARstart: mov ax, dsegmov ds, axmov es, axlea si ,string1①cld②repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp: mov ah,09hint 21hmov ax, 4c00hint 21hMAIN ENDPCSEG ENDSend start实验步骤:1)用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在d:\masm下,注意保存时将文件扩展名改为.asm(如test1.asm)。
2)屏幕左下角”开始”–“运行”输入cmd ,进入dos命令操作,先用d: 和cd mas m 命令改变路经,接着用”masm + 文件名” (如masm test1,这里文件名可以不带扩展名)对源文件进行汇编,产生.obj文件和.LST文件。
实验一汇编程序的汇编及运行1.实验目的和要求1、熟悉汇编程序的汇编、连接、执行过程2、生成LST文件,查看LST文件3、生成OBJ文件,修改语法错误4、生成EXE文件5、执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序: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 ENDSEND2、输入有错误的文件,修改错误语句。
(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: DATA BEING 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 START3、输入正确的程序,汇编、连接、运行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)编写源程序。
实验一认识Tddebug集成操作软件实验日志指导教师曾素华实验时间:2013 年04 月02 日学院计算机科学与技术专业计算机科学与技术班级0411005 学号2010211912 姓名李新娱实验室s401一、实验题目认识Tddebug集成操作软件二、实验目的1.熟悉汇编程序的开发过程。
2.认识Tddebug集成操作软件。
3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。
4.掌握INT 21H软件中断来调用DOS内部子程序的方法三、实验内容及说明1.实验内容:数据传送实验1)编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
参见示例出程序。
2)修改此程序,采用字符串传送指令完成。
2.实验中使用DOS功能调用(INT 21H):参见教材《32位微型计算机原理与接口技术》89页(1)显示字符串入口:AH=09H调用参数:DS:DX=串首地址,‘$’为结束字符。
(2)返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验主要步骤要求一数据传送实验1.运行Tddebug软件,选择Edit菜单编写实验程序2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
3.使用Rmrun菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各寄存器及数据区的内容。
过程如下:3)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。
每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。
4)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:●方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区●方法2:选择菜单View| Dump,弹出内存数据显示窗口。
汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一. 实验题目【汇编语言补充作业T20T20】编写完整程序,利用】编写完整程序,利用DOS 系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二. 程序流程及思路实现字符串输入,需要分成三个步骤:实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS 系统功能调用0AH 号子功能,(DS:DX DS:DX))= = 输入缓冲区首址;输入缓冲区首址;输入缓冲区首址;3、在输入的字符串尾加上‘、在输入的字符串尾加上‘$$’字符,以作为输出结束条件。
’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;和字符串实际字符数;2、输出回车换行可利用字符串:、输出回车换行可利用字符串:CR DB 0AH,0DH,CR DB 0AH,0DH,CR DB 0AH,0DH,’’$’。
’。
三. 源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;MAXLEN DB N ;缓冲区字符的最大长度缓冲区字符的最大长度缓冲区字符的最大长度ACTLEN DB ? ;ACTLEN DB ? ;实际字符个数实际字符个数实际字符个数STRING DB N DUP(?) ;STRING DB N DUP(?) ;字符空间字符空间字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行回车换行MOV BL,MAXLEN+1 ;取实际的字符长度取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上输出结尾要加上$ $MOV DX,SI ;把开始存放字符的首地址赋给DX(注:以下程序采用b方法)方法)。
微机原理实验报告西安电⼦科技⼤学实验报告班级:1303018学号:130********姓名:李胜东地点: EII-312批次:第批时间: 2015.11-2015.12实验⼀汇编语⾔编程实现1.实验⽬的(1)掌握汇编语⾔的编程⽅法(2)掌握DOS功能调⽤的使⽤⽅法(3)掌握汇编语⾔程序的调试运⾏过程2.实验内容(1)将指定数据区的字符串数据以ASCII码形式显⽰在屏幕上,并通过DOS功能调⽤完成必要提⽰信息的显⽰。
(2)在屏幕上显⽰⾃⼰的学号姓名信息。
(3)循环从键盘读⼊字符并回显在屏幕上,然后显⽰出对应字符的ASCII码,直到输⼊”Q”或“q”时结束。
实验中使⽤的DOS功能调⽤: INT 21H3.实验步骤及原理(1)运⾏QTHPCI软件,根据实验内容编写程序,参考程序流程如下图所⽰。
(2)使⽤“项⽬”菜单中的“编译”或“编译连接”命令对实验程序进⾏编译、连接。
(3)“调试”菜单中的“进⾏调试”命令进⼊Debug调试,观察调试过程中数据传输指令执⾏后各寄存器及数据区的内容。
按F9连续运⾏。
(4)更改数据区的数据,考察程序的正确性。
4.实验源代码DATA SEGMENTNUMBER DB 'SNO:130********',0AH,'NAME:lishengdong',0DH,0AH,'$';0DH (回车))0AH(换⾏)24H($)结束MSG1 DB 0AH,0DH,'If you want to leave,please input: q or Q ',0AH,0DH,'$'MSG2 DB 0AH,0DH,0AH,0DH,'Input: $'RESULT DB 0AH,0DH,'ASCII is: $'SD DB ' 'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV SI,OFFSET DATAMOV CX,5A:MOV AL,DS:[SI]AND AL,0F0HCMP AL,0A0HJB A1ADD AL,07HA1:SHR AL,1SHR AL,1SHR AL,1SHR AL,1OR AL,30HMOV AH,02HMOV DL,ALINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB A2ADD AL,07HA2:OR AL,30HMOV AH,02HMOV DL,ALINT 21HINC SILOOP AMOV AX,DATAMOV DS,AXMOV DX,OFFSET NUMBERMOV AH,09HINT 21HMOV DX,OFFSET MSG1 MOV AH,09H INT 21HC1: MOV DX,OFFSET MSG2 MOV AH,09H INT 21HMOV AH,01HINT 21HCMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITMOV SD,ALMOV DX,OFFSET RESULTMOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0HMOV CL,4SHR AL,CLCMP AL,0AHJB C2ADD AL,07HC2: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,ALMOV AH,02HINT 21Hloop C1EXIT: MOV AX,4C00HINT 21HCODE ENDSEND START实验⼆数码转换实验1.实验⽬的(1)掌握不同进制数及编码相互转换的程序设计⽅法。
本科实验报告实验名称:字符串操作实验课程名称:CPU与汇编实验实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:无学院:信息与电子同组搭档:无专业:信息工程成绩:一、实验要求和目的1.了解汇编语言字符串处理基本流程;2.熟悉汇编语言字符串处理基本指令的使用方法;3.掌握利用汇编语言实现字符串处理的程序设计方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK等应用程序。
三、实验涉及的主要知识1、字符串处理基本操作流程(1)利用SI 寄存器保存源串首地址;(2)利用DI 寄存器保存目的串首地址;(3)利用CX 寄存器保存字符串长度;(4)利用CLD 或STD 指令设置字符串处理方向;(5)利用字符串处理指令实现相关处理。
其中,CLD 指令使DF=0,在执行串处理指令时可使地址自动增量;STD 使DF=1,在执行串处理指令时可使地址自动减量。
2、重复前缀指令,重复次数由计数寄存器CX 中存放的值决定,指令每重复执行一次,计数器CX 中值减1,当CX 中值减至0 时,停止重复执行,继续执行下一条指令REP无条件重复前缀,重复串操作直到计数寄存器的内容CX 为0为止。
经常与REP 配合工作的字符串处理指令有MOVS、STOS 和LODS。
REPE/REPZ 判断计数寄存器的内容CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ 配合工作的串指令有CMPS 和SCAS。
REPNE/REPNZ 判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ 配合工作的串指令有CMPS和SCAS。
3、字符串处理基本指令(1)MOVS 传送指令格式:MOVS DST,SRC或MOVSB(传送字节)或MOVSW(传送字)。
实验4 DOS系统功能调用班级:xxx 学号:xxx 姓名:xxx实验题目:完善“调用宏DOSINT:调用DOS系统功能实现字符串的输出和输入,其中10号功能需要的字符数要求从键盘输入”,要求输入的数字是多位数。
实验目的:1. 掌握DOS系统功能的调用过程和方法;2. 熟悉源程序基本组成:assume的使用、段寄存器的赋值、程序返回;3. 掌握MASM、LINK、DEBUG等工具的使用。
实验设备:软件:DOS操作系统、编辑软件、MASM 5.0实验内容:1.程序代码DOSINT MACRO NOMOV AH,NOINT 21HENDMDA TA SEGMENTERRSTR DB 'ERROR NUMBER!$'Hello DB 'Hello World!$'STRING DB ?,?,16 DUP(?),'$';预留空间DA TA ENDSCODE SEGMENTASSUME DS:DA TA,CS:CODEBEGIN: MOV AX,DA TAMOV DS,AX ;初始化DSMOV DX,OFFSET Hello ;串首地址送DXDOSINT 9 ;宏调用DOSINT 1 ;宏调用CALL ASCIINUM ;子程序调用MOV BL,ALDOSINT 1 ;宏调用CALL ASCIINUMMOV CL,ALMOV AL,BLMOV BL,10IMUL BLADD AL,CLMOV STRING,ALMOV DL,0AHDOSINT 2LEA DX, STRING ;取预留空间首地址DOSINT 10DOSINT 4CH ;宏调用返回DOSASCIINUM PROCPUSH DXCMP AL,30H ;’0’?JB ERRCMP AL,39H ;’9’?JBE CHNGCHNG: SUB AL,30HJMP EXITERR:LEA DX,ERRSTRDOSINT 9EXIT: POP DXRETASCIINUM ENDPCODE ENDSEND BEGIN2. 调试过程(具体应用DEBUG指令及其结果)使用DEBUG调试过程以及程序运行结果如下所示:实验思考与总结:通过本次实验,掌握了宏定义、宏体的组成、宏调用等方法,掌握了子程序设计以及如何调用子程序,返回主程序等语句的使用,了解了宏指令和子程序的区别;进一步熟悉了DOS系统功能的调用;学会了如何将十进制数显示输出。
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。
四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。
b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。
e) 使用debug程序调试程序的方法。
五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。
目录一.论文题目 (2)二.技术参数 (2)三.设计步骤 (2)1.数据段 (2)2. 主程序 (2)3. 清屏子程序 (3)4. 显示子程序 (3)五.程序代码 (4)六.程序运行结果 (16)七.设计体会 (17)八.参考文献 (17)九.附录 (17)一.论文题目字符图案显示程序二.技术参数1.通过编程将字符数据直接置入显示存储区,文本方式下屏幕上的字符位置所对应的显示缓冲区的偏移地址为:行号(0~24)×160+列号(0~79)×2。
2.BOIS功能调用:int 10H在本程序中发回了至关重要的作用。
在图形方式下,可以利用BOIS 的int 10h功能对屏幕上的像素进行读写和处理。
例如设置彩色文本方式:mov ah,0 ,mov al,3,int10h;取当前显示方式:mov ah,0fh ,int 10h,;置光标位置:mov ah,2 ,int 10h;显示字符:mov ah,09 ,int 10h等3.DOS系统功能调用(21H)。
从键盘输入字符:mov ah,01h ,int 21h,带返回码终止:mov ah,4ch ,int 21h。
三.设计步骤1.数据段在数据段中设置要显示“科技大学”图案的字符图形表。
图形表主要包括每个字符的ASCII,属性,以及在显示图形中的相对位移量(行、列坐标)四个参数组成。
其中,ASCII决定了用何种字符显示要求图案。
行、列坐标恰当的排列决定了图形的完整性和美观性。
2.主程序在主程序中完成初始化DOS,设置彩色文本方式等功能。
其中清屏子程序、显示子程序。
并且设置了退出的操作,操作者可以按空格退出,回到DOS界面。
3.清屏子程序INT 10H功能6使屏幕内容上卷指定的行,这个功能需要设置7个参数。
AH、BH、CH、CL、DH、DL分别表示了上卷行数、初始化窗口、卷入行属性、左上角行列号和右上角行列号。
在做这项工作前,将寄存器压栈保护寄存器,最后再出栈回复寄存器。
实验报告──学年第学期实验课程汇编语言学生姓名123实验项目汇编语言上机过程及屏幕字符显示程序学院计算机科学技术实验性质专业选修课班级学号实验地点同组人数 1 第组实验日期第周星期第节成绩3环境参数Windows xp一、实验目的及要求二、实验原理、实验内容三、实验仪器设备及材料四、操作方法与实验步骤五、实验数据记录及处理六、实验结果分析及讨论一:1、熟练掌握汇编语言的程序格式,程序设计方法;学会使用masm6.11对源程序进行编译、链接、调试和运行2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。
3、利用^Break退出程序的方法及局限性。
4、汇编程序的编写二:实验任务编写一个简化的段定义结构程序:先提示输入数字“Input number:0-9”,然后在下一行显示输入的数字,结束;如果不是键入了0-9 数字,就提示错误“ERROR!”,继续等待输入数字。
源代码:编译连接:实验结果:此程序没按要求将数字在下一行输出。
且程序中用到了多余的指令int 3.修改“done:”段done: mov dl,almov ah,02hint 21h.exit 02.编写一个完整的段定义结构程序:从键盘输入一个字符串(不超过255个),将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示。
要求对以上两个程序,进行编译,链接,调试,运行,给出具体步骤源代码:请问程序中的第39行错误用了一个标号。
编译连接:运行结果:三、小结1、学会使用edit进行程序的编写。
2、学会写简易段程序和完整段程序。
3、学会了在dos下进行汇编程序的编译、连接、调试和运行。
4、学会了使用21号中断的2号9号功能进行字符的显示。
5、汇编基础知识不扎实,指令经常写错,要多练习。
仪器设备损坏、非正常损耗材料(试剂)及处理情况:无教师对报告的最终评价及处理意见:2段程序均有错。
教师签字:年月日。
汇编实验一显示字符串标签:汇编程序开始的时候有点畏惧写汇编的程序,因为汇编的程序有太多的指令需要记忆了,同时这个语言有点让人难以理解,但是经过我的一番复习之后,发现其实也并不是那么难,正所谓说:只要下功夫,没有事是不能成功的。
由于是第一次写我自己的汇编程序,所以今次我特别详细的写下的编程过程。
我的整个开发过程如下:首先要理解汇编编程的过程:一,建立.asm文件,将masm.exe,debug.exe,link.exe复制到与源程序同一个文件目录下。
打开.asm文件,在里面编写好程序二,编写好程序之后,要检查程序有没有问题,这里要打开dos界面,进行对程序编译,cd是打开文件夹的意思,masm命令就是用来编译文件了,我建立的是1.asm文件,所以直接打上masm 1.asm就可以编译了,假如有错误系统与直接提示错误的地方和行,根据提示就可以进行修改了。
三,link 1.obj就可以生成.exe文件了。
直接运行exe文件文件就可以看到你所需要的结果,例如本实验就是显示字符串了。
讲完如何进行汇编写程序,编译程序和生成可执行文件,下面我来讲讲汇编程序具体怎么写,其实写汇编程序有一定的格式,这些格式一般都是固定的不需要修改直接套用就可以了。
汇编的一些固定格式:;sample program display message;注释行stack segment para stack'stack';定义堆栈段db 1024 dup(0);在存储器的某个区域建立一个堆栈区stack ends data segment;定义数据段message db'This is asample program.';在存储器中存放供显示的数据db 0dh,0ah,'$'data ends code segment;定义代码段assume cs:code,ds:data,ss:stack start proc far;将程序定义为远过程程序开始。