汇编语言实验4-分支程序设计
汇编语言实验4详细讲解
汇编语言实验4详细讲解一、引言汇编语言是一种底层的计算机语言,它直接操作计算机的硬件。
在汇编语言实验4中,我们将深入了解汇编语言的一些重要概念和技巧。
本文将详细讲解汇编语言实验4的内容,帮助读者更好地理解和应用汇编语言。
二、实验目的汇编语言实验4的主要目的是学习和掌握在汇编语言中使用条件和循环结构的方法。
通过实验,我们将能够编写能够根据条件执行不同操作的程序,并实现循环执行一定次数的功能。
三、实验内容1. 条件结构条件结构是根据条件的真假来执行不同的操作。
在汇编语言中,我们可以使用条件跳转指令来实现条件结构。
条件跳转指令根据条件寄存器的值来决定是否跳转到指定的地址执行。
常用的条件跳转指令有JZ、JNZ、JC、JNC等。
2. 循环结构循环结构是重复执行一段代码的结构。
在汇编语言中,我们可以使用循环指令来实现循环结构。
循环指令根据计数器的值来判断是否继续执行循环体,并在每次循环结束后更新计数器的值。
常用的循环指令有LOOP、LOOPE、LOOPZ、LOOPNE、LOOPNZ等。
四、实验步骤1. 定义和初始化计数器在循环结构中,我们首先需要定义一个计数器,并对其进行初始化。
计数器可以使用DX寄存器或AX寄存器来保存。
2. 执行循环体在循环结构中,我们需要执行的代码放在循环体中。
循环体的代码将会被重复执行,直到计数器的值为0或满足其他条件。
3. 更新计数器的值在每次循环结束后,我们需要更新计数器的值。
可以使用INC或DEC指令对计数器进行加1或减1操作。
4. 判断是否继续执行循环在每次循环结束后,我们需要判断是否继续执行循环。
可以使用循环指令来实现此功能。
根据计数器的值或其他条件来判断是否继续执行循环。
五、实验示例下面是一个简单的实验示例,演示了如何使用条件和循环结构来实现一个简单的程序:```MOV CX, 10 ; 初始化计数器为10MOV AX, 0 ; 将AX寄存器清零LOOP_START:ADD AX, CX ; 将CX的值加到AX中LOOP LOOP_START ; 循环执行,直到CX的值为0MOV BX, AX ; 将AX的值保存到BX寄存器中```在上面的示例中,我们首先将CX寄存器初始化为10,然后将AX 寄存器清零。
汇编语言-实验四-循环分支程序设计
实验四循环分支程序设计一&实验目的1、熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
2、掌握循环及分支程序的设计方法;3、学会针对不同的问题,选用不同的循环分支结构设计方法;二&实验环境微型计算机一台DOS或WINDOWS操作系统,MASM开发套件。
三&实验要求1、使用正确的指令格式和程序结构编写实验内容要求的所有程序;2、对编写或改写的程序进行汇编连接时,注意对错误信息的处理;3、熟悉源程序汇编、连接的使用方法。
四&实验内容1、使用程序1掌握汇编语言程序上机过程,2、阅读程序2,理解程序功能并上机运行,使用debug检验结果。
3、编写一个程序,判别键盘上输入的字符;若是1-9字符或A-Z ,则显示之;若为a-z字符,均显示“A-Z”;若是<ESC>(其ASCII码为1BH),则结束程序。
4、改写任务三中的程序:输入小写字母a时,显示内容为aA*输入小写字母a时,显示内容为a***输入小写字母a时,显示内容为aa***五&实验步骤1、用EDIT编辑软件,编写.ASM源程序。
2、对其进行汇编及连接,产生.EXE文件。
3、在DOS下运行.EXE文件进行。
4、实验程序清单1)程序1:stack segmentdw 512 dup(?)stack endsdata segmentstring db 'Hello, Everybody !','$'data endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hcode endsend start2)程序2data segmentx db 20hy dw ?data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,xmov bl,10xor ah,ahshl ax,1mov bx,axmov cl,2shl ax,cladd ax,bxmov y,axmov ax,4c00hint 21hcode endsend start3)程序3:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bnd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start4)改写程序1:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bmov ah,2int 21hmov al,'*'nd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start5)改写程序2:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndmov al,'*'mov cx,2ok: mov dl,almov ah,2int 21hloop oknd: mov dl,almov ah,2int 21hjmp againint 21hcode endsend start6)改写程序3:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndmov dl,almov ah,2int 21hmov al,'*'mov cx,2ok: mov dl,almov ah,2int 21hloop oknd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start六&思考题:编写一个程序,显示AL寄存器中的两位十六进制数。
分支程序设计
分支程序设计
实验序号:××××××
一、实验目的
1.掌握汇编语言程序设计的基本方法。
2.掌握汇编语言程序的分支结构
二、实验内容
编写一汇编语言程序,用分支结构计算下面分段函数的值。
2X-1 X<0
Y= 0 X=0
5X-6 X>0
通过在程序中给定x的值给x赋值,编程计算y的值并将结果以十六进制的形式显示出来。
三、实验设备
装有编译软件TASM32.exe和连接软件tlink.exe及相关编辑工具的计算机。
四、实验步骤
1.分析实验课题,确定程序的基本结构,提出解决问题的思路。
2.画出程序的流程图。
3.根据流程图编写汇编语言程序。
4.对编辑好的汇编语言源程序进行编译、连接获得可行性程序文件。
5.根据编译、连接或可执行程序的运行结果修改源程序,直至得到正确的结果。
五、写出实验结果及实验体会
编程提示
1.程序的流程示意图为:
2.计算得到y的值后,以一下方式显示:。
汇编实验报告--分支程序设计实验
实验四分支程序设计实验学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握分支程序的设计方法;2.掌握利用DEBUG修改参数、检查结果的方法;3.熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
二、实验内容p181,例5.10把x的绝对值赋给y,x为一个四字节有符号数。
三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
2.说明本实验是如何利用DEBUG进行调试的。
五、主要实验步骤跳跃表法可以使程序根据不同的条件转移到多个程序分支中去。
步骤;第一步:定义所要使用的数据段,并分别定义是字还是字节。
第二步:对所要使用寄存器进行压栈处理。
第三步:书写子程序,即寄存器中哪一位为1(从低位到高位)把程序转移到8个不同的程序分支中去。
第四步:测试结果。
1.对.EXE文件进行调试运行。
(1)用DEBUG调试运行,学会修改AL内容的方法;(2)对DSPKEY.EXE键入不同的字符,分别进行调试;(3)在MS-DOS下运行这两个.EXE文件。
六.实验结果及测试子程序:cmp al, 0 ;AL为逻辑尺je continuelea bx, branch_tableL:shr al, 1 ;逻辑右移jnc add1jmp word ptr[bx];段内间接转移add1: add bx, type branch_table ;add bx,2jmp L七.心得体会该实验让我了解用变址寻址方式实现跳跃表法源代码:Brand_addresses segmengtBranch_table dw routine_1dw routine_2dw routine_3dw routine_4dw routine_5dw routine_6dw routine_7dw routine_8branch_addresses endsprocedure_select segmentmain proc farassume cs: procedure_select ,ds:branch_addresses start:push dssub bx,bxpush bxmov bx,branch_addressesmov ds,bxcmp al,0je continue_main_linemov si,0l:shr al,1jnb not_yetjmp branch_table[si]not_yet:addsi,type branch_tablejmp lcontinue_main_line:routine_1:routine_2:retmain endpprocedure_select endsend start。
汇编实验四分支程序设计
实验报告姓名学号专业班级计算机科学与技术课程名称汇编语言实验日期成绩指导教师批改日期实验名称分支程序设计实验目的:1、熟练掌握数组的使用,并能对数组中各种类型的内容进行分类存放。
2、能将程序执行的结果输出并显示到屏幕上。
实验内容:实验要求:测试一个10字数组中正数,负数和0的个数,将正数的个数存于DI中,0的个数存在SI中,并根据N-(DI)-(SI)求出负数的个数放在AX中。
最后将正数,0及负数的个数显示在屏幕上并用逗号隔开。
源程序:data_seg segmentnum db 10data_list dw -4,-6,12,15,-8,-4,0,9,0,-3data_seg endscode_seg segmentmain proc farassume cs:code_seg,ds:data_segstart:push dssub ax,axpush axmov ax,data_segmov ds,axmov cx,10mov bx,0mov di,bxmov si,bxagain:cmp data_list[bx],0jle less_or_eqinc dijmp short nextless_or_eq:jl nextinc sinext:add bx,2dec cxjnz againmov dx,diadd dl,30hmov ah,02hint 21hmov dx,2chmov ah,02hint 21hmov dx,siadd dl,30hmov ah,02hint 21hmov dx,2chmov ah,02hint 21hmov ax,10sub ax,disub ax,simov dx,axadd dl,30hmov ah,02hint 21hretmain endpcode_seg endsend start实验结果:结果分析:从10字数组中的第一个数开始和0比较,若大于0,DI加1;若等于0,SI加1;若小于0,BX加2,循环进行比较。
实验四 分支程序设计(一)
实验四分支程序设计
一、实验目的
1、利用已掌握的汇编语言进行简单的程序设计练习。
2、学习和掌握建立与运行汇编语言源程序各个步骤的命
令。
3.熟悉汇编程序的调试过程。
二、实验内容
在一个有正负数的数据块中,找出负数的个数。
假设有数据-19,28,37,-46,55,61,-74,数据块的长度存放在CX寄存器中,负数的个数存放在以SUM为符号的单元中。
实验预习要求
按照题目要求画出流程图,并在实验前编写好源程序三、实验器材
IBM PC/XT 微机一台
四、实验思考题
1、如果找正数的个数,如何修改程序?上机调试后写出
该程序。
五、实验报告要求
1、整理出经过运行而且证明是正确的源程序。
2、整理正确的运行结果。
3、回答思考题
4、实验报告中应包括实验目的,实验内容,实验步骤,
实验设备,思考题。
汇编语言程序设计实验报告二(分支循环程序实验)
汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。
2、熟悉DEBUG程序的使用方法。
3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。
二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。
2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。
三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。
2、预习DEBUG调试程序的使用方法。
3、根据实验内容要求,编写好实验源程序。
四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。
2、汇编、连接源程序,产生.EXE可执行文件。
3、运行程序。
(1) 进入DEBUG。
打入DEBUGT MYPROG.EXE。
MYPROG为所编程序的文件名。
(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。
如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。
(3) 检查程序。
在程序中设置若干断点,以便杳出错误所在。
(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。
五、实验报告要求1、列出程序清单,并给出程序流程图。
2、总结实现数据传送的几种方法,指出它们的区别。
开始3、分析实验中所遇到的一些问题,分析错误原因。
4、说明本实验中是如何使用DEBUG进行调试的。
CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。
汇编语言实验报告4
程及屏幕字符显示程序一、实验目的1、熟练掌握汇编语言的程序格式,程序设计方法;学会使用masm6.11对源程序进行编译、链接、调试和运行2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。
3、利用^Break退出程序的方法及局限性。
4、汇编程序的编写二、实验任务1学习汇编语言程序的上机过程2. 利用INT 21的09H号功能调用显示字符串。
验证以下程序1)用A命令在100H处键入下列程序:MOV AH, 9MOV DX,110INT 21INT 202)用A命令在110H处键入下列字符串的ASCII码:DB 'This is a sample!$'3)用N命令和W命令将此程序(包括数据区)存入文件名为的磁盘文件中。
(存入前BX:CX必须置为文件长度值)。
4)用Q命令退出DEBUG。
5)在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG 检查程序有无错误。
(给出结果截图)3、利用INT 21H 2号功能显示字符: 1)用A命令在100H处键入下列程序: XOR DL,DLMOV CX,100LOP: MOV AH,2INT 21INC DLPUSH CXMOV CX,8DELY: PUSH CXMOV CX,256J: LOOP JPOP CXLOOP DELYPOP CXLOOP LOPINT 202)用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。
仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?3)按CTRL+BREAK退出此程序,若一次不行可多做几次。
4 编写一个简化的段定义结构程序:先提示输入数字“Input number:0-9”,然后在下一行显示输入的数字,结束;如果不是键入了0-9 数字,就提示错误“ERROR!”,继续等待输入数字。
汇编程序设计(分支)
无条件跳转指令,无论条件是否满足,都会将程 序的执行流程跳转到指定地址。
3
JCC
条件跳转指令,根据某个条件是否满足,决定是 否跳转到指定地址。
条件跳转指令
JZ/JE
当结果为零时跳转,即ZF(零标志位)被设置。
01
JG/JNLE
当结果大于时跳转,即SF(符号标志 位)和OF(溢出标志位)同时被设置。
在程序测试阶段,应该对分支指令进行充分的测试,包括 各种边界条件和异常情况,以确保程序的正确性和稳定性。
注意指令的跨平台兼容性
由于不同的处理器架构和汇编语言指令集可能存在差异,因此编 写的汇编程序可能无法在所有平台上正常运行。
为了确保汇编程序的跨平台兼容性,程序员需要了解目标平台的 处理器架构和指令集,并选择合适的指令集和语法进行编写。
参数来执行相应的操作。
寄存器保护
03
在子程序调用过程中,需要保存和恢复调用者的寄存器状态,
以避免数据冲突或丢失。
04
分支指令的优化
减少跳转指令的使用
减少不必要的跳转
在程序中,尽量减少不必要的跳转指 令,因为它们会增加程序的复杂性和 执行时间。可以通过重新组织代码、 使用条件语句等方式来减少跳转。
分支指令的重要性
分支指令允许程序根据特定条件改变 执行流程。它们在程序设计中起着至 关重要的作用,因为它们允许程序根 据不同的情况做出决策。
分支指令能够使程序更加灵活和可维 护,从而提高程序的效率和可靠性。
02
分支指令概述
跳转指令
1 2
跳转指令
用于改变程序的执行流程,将控制转移到指定的 地址。常见的跳转指令包括JMP(无条件跳转) 和JCC(条件跳转)。
循环嵌套
汇编语言--分支结构程序设计实验
汇编语言--分支结构程序设计实验汇编语言实验报告实验6 汇编语言分支结构程序设计学院:计算机学院班级:姓名:梁建辉学号: [1**********]72019年12月1日1. 实验目的:(1)(2)(3)(4)掌握汇编语言顺序结构设计方法熟悉常用汇编指令的用法学会用debug输入、运行小程序,并检查运行情况的方法学会在pc机上建立、汇编、连接、调试和运行80x86汇编语言程序的过程2. 实验内容:(1)调试程序1:将存储单元DAT+1中的两个压缩的bcd码拆成2个非压缩的不承担码(高位bcd码放在DAT+1单元,地位bcd码放在DAT+2单元)。
程序如下:DATA SEGMENTDAT DB 0A5H,2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX, DATAMOV DS, AXMOV AL, DATMOV BL, ALMOV CL, 4SHL BL, CLMOV DAT+1, BLAND AL, 0FHMOV DAT+2, ALMOV AH, 4CHINT 21HCODE ENDSEND START上机运行该程序并检查运行结果是否正确。
3.实验运行结果:(1)1401:0000 B80014 MOV1401:0003 8ED8 MOV DS,AX1401:0005 A00000 MOV AL,[0000]1401:0008 8AD8 MOV BL,AL1401:000A B104 MOV CL,041401:000C D2E3 SHL BL,CL1401:000E 881E0100 MOV [0001],BL1401:0012 240F AND AL,0F1401:0014 A20200 MOV [0002],AL1401:0017 B44C MOV AH,4C1401:0019 CD21 INT 211401:001B FE8946F6 DEC BYTE PTR [BX+DI+F646]1401:001F EB06 JMP 0027段首地址为:1400运行前的结果:-d 1400:0,F1400:0000................运行后的结果:-gProgram terminated normally-d 1400:0,f1400:0000.P..............单步运行结果:BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13F0 ES=13F0 SS=1400 CS=1401 IP=0003 NV UP EI PL NZ NA PO NC 1401:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=A5 -tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV BL,AL-tAX=14A5 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV CL,04-tAX=14A5 BX=00A5 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCSHL BL,CL-AX=14A5 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401NV UP EI PL NZ NA PE NCMOV [0001],BLDS:0001=50 -tBX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401NV UP EI PL NZ NA PE NC 1401:0012 240F AND AL,0F-tBX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NCMOV [0002],ALDS:0002=05 -tAX=1405 BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NC MOV AH,4C-AX=4C05 BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000SS=1400 CS=1401 NV UP EI PL NZ NA PE NC INT 21程序2:DATAX Y SEGMENT DB 20H DW ?ENDSSEGMENTMOV AX,DATA;把X的值转移到AL ;清零AH ;定义X为字类型并赋值20H ;定义Y为字节类型 DATA CODESTART: ASSUME CS:CODE,DS:DATA MOV MOV DS,AX AL,X XOR AH,AH SHL AX,1 MOV MOV ;将目的操作数向左移动1位 ;移位大于1,需用CL ;将目的操作数向左移动2位 ;把AX与BX中的值相加 ;返回DOS状态下 BX,AX CL,2 SHL AX,CL ADD AX,BX MOV MOV Y,AX AH,4CH INT 21H ENDS END START CODE运行结果:1401:0000 B80014 MOV AX,14001401:0003 8ED8 MOV DS,AX1401:0005 A00000 MOV AL,[0000]1401:0008 32E4 XOR AH,AH1401:000A D1E0 SHL AX,11401:000C 8BD8 MOV BX,AX1401:000E B102 MOV CL,021401:0010 D3E0 SHL AX,CL1401:0012 03C3 ADD AX,BX1401:0014 A30100 MOV [0001],AX1401:0017 B44C MOV AH,4C1401:0019 CD21 INT 211401:001B FE8946F6 DEC BYTE PTR [BX+DI+F646]1401:001F EB06 JMP 0027-首地址:1400运行前结果:-d 1400:0,f1400:0000...............-t运行后结果:Program terminated normally-d 1400:0,f1400:0000@..............单步调试:-tAX=-tAX=-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000] DS:0000=20BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-gBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=20-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-gBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8MOV DS,AX-tAX=13FB BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=13FB CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=20-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-g程序3:DATA SEGMENTORG 1000HBIN DB ?HEX DB 6BhORG 1030HDB 00H, 01H,02H,03H,04H,05H,06H,07H,08H,09H ORG 1040HDB 0AH,0BH,0CH,0DH,0EH,0FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,HEXMOV BX,OFFSET BINSUB AH,AHADD BX,AXMOV DL,[BX]MOV CL,4SHL DL,CLMOV AL,HEX+1MOV BX,OFFSET BINXOR AH,AHADD BX,AXMOV Ax,BXOR Al,DLMOV BIN,ALMOV AH,4CHINT 21HCODE ENDSEND START运行结果:1505:0000 B80014 MOV1505:0003 8ED8 MOV DS,AX1505:0005 A00110 MOV AL,[1001] 1505:0008 BB0010 MOV BX,1000 1505:000B 2AE4 SUB AH,AH1505:000D 03D8 ADD BX,AX1505:000F 8A17 MOV DL,[BX]1505:0011 B104 MOV CL,041505:0013 D2E2 SHL DL,CL1505:0015 A00210 MOV AL,[1002] 1505:0018 BB0010 MOV BX,1000 1505:001B 32E4 XOR AH,AH1505:001D 03D8 ADD BX,AX1505:001F 8BC3 MOV AX,BX首地址:1400-运行前结果:-d 1400:0,f1400:0000.....................-运行后结果:-d 1400:0,f1400:0000...........单步调试:BX=0000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13F0 ES=13F0 SS=1400 CS=1505 IP=0003 NV UP EI PL NZ NA PO NC 1505:0003 8ED8 MOV DS,AX-TAX=1400 BX=0000 CX=107A DX=0000 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV AL,[1001]DS:1001=6B-TBX=0000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PO NCMOV BX,1000-TAX=146BCX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCSUB AH,AH-TBX=1000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL ZR NA PE NC ADD BX,AX-AX=006B CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOV DL,[BX]DS:106B=32-tAX=006B BX=106B CX=107A SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOVCL,04-tAX=006B BX=106B CX=1004 DX=0032 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PO NCSHLDL,CL-tAX=006B BX=106B CX=1004 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PO CYMOV AL,[1002]DS:1002=00-tBX=106B CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PO CYMOVBX,1000-AX=0000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO CYXORAH,AH-tAX=0000 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL ZR NA PE NCADD BX,AX-tAX=0000 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PE NCMOV AX,BX-tBX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PE NCOR AL,DL-tBX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV [1000],ALDS:1000=20--tAX=1020 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV AH,4C-心得体会:写程序时,对于有些特定的指令不太熟,有时还得借助于课本,不能脱离课本编程。
汇编实验四分支和循环程序设计实验(设计性实验)
汇编实验四分支和循环程序设计实验(设计性实验)汇编语言实验报告实验四分支和循环程序设计实验(设计性实验)班级:姓名:学号:实验日期:实验四分支和循环程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。
1.无条件转移指令JMP无条件转移指令JMP 是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令JXX条件转移指令可分为三大类:1).简单条件转移指令指令。
根据单个标志位的状态判断转移条件。
标志位指令转移条件意义CF JC CF=0 有进位/借位JNC CF=1 无进位/借位ZF JE/JZ ZF=1 相等/等于0JNE/JNZ ZF=0 不相等/不等于0 SF JS SF=1 是负数JNS SF=0 是正数OF JO OF=1 有溢出JNO OF=0 无溢出PF JP/JPE PF=1 有偶数个1JNP/JPO PF=0 有奇数个12).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是A-B,其转移指令如下:指令转移条件意义JA/JNBE CF=0 AND ZF=0 A>BJAE/JNB CF=0 OR ZF=1 A>=BJB/JNAE CF=1 AND ZF=0 A<b< p="">JBE/JNA CF=1 OR ZF=1 A<=B3).带符号数条件转移指令。
汇编语言_分支程序设计
一、实验题目分支程序设计二、实验目的熟悉汇编语言程序设计的开发环境、格式以及汇编过程;三、实验要求1)Debug的主要命令(结合教材第四章的例子),熟练掌握Debug命令的U命令、D命令、R命令、G命令、T命令、Q命令等;2)掌握分支程序的设计方法;3)输入并汇编折半查找程序;4)观察并记录运行结果。
四、实验源代码data segmentA dw 32,85,16,15,8data endscode segmentassume cs:code,ds:datastart: mov ax, datamov ds, axmov cx, 5dec cxloop1: mov di, cxmov bx, 0loop2:mov ax, A[bx]cmp ax, A[bx+2]jle continuexchg ax, A[bx+2]mov A[bx], axcontinue:add bx, 2loop loop2mov cx, diloop loop1mov ax, 4c00hint 21hcode endsend start五、所用仪器、材料(设备名称、型号、规格等)Masm 6.0,debug。
六、实验方法、步骤1.使用masm6.0将所写的程序进行编译,生成exe文件,运行。
2.使用debug调试生成的exe文件,使用t命令进行单步调试。
3.记录下关键位置的调试截图。
七、实验过程原始记录(数据、图表、计算等)1、用r命令查看2、用u命令进行反汇编3、用t命令进行单步调试如下cx自减1,进行第一次循环。
4.初始化BX。
5.比较AX和[BX+2],即比较相邻2个数的大小,若AX大于[BX+2],则交换2个数的位置,若AX小于[BX+2],则比较下一个数。
6.32小于85,比较下一个数。
7.BX+2比较下一个数。
8.进行的第2次循环,比较下一个数,因为85大于16,所以进行交换。
9.用d命令查看内存中的数据,可以看到85和16的位置已经交换。
汇编实验4-分支程序设计
汇编实验四分支程序
实验目的:
掌握汇编语言分支程序上机调试过程。
实验内容:
比较两个无符号数大小,将大数存入MAX单元操作步骤:
1.输入源程序: EDIT d:\hb\ex5.asm
2.汇编源程序:masm ex5.asm(具体步骤略)
3.连接目标程序:link ex5.obj(具体步骤略)
4.用DEBUG调试并查看运行结果
DEBUG ex5.EXE
1先用U命令进行反汇编,看到源程序在内存中的存储
2 T (单步执行一条指令。
)
3 T (单步执行一条指令。
)
4 D DS:0 用D命令观看数据段的内容
数据段中第一个单元内容为95H(x1),第二个单元内容为64H(x2),第三个单元用于存放较大的无符号数,(比较前看到的内容为00H)
5 T (单步执行一条指令。
)
6 T (单步执行一条指令。
)
7 T (单步执行一条指令。
)
此时由于x1>x2,所以直接转到mov max,al语句
8 T (单步执行一条指令。
)
9 D DS:0 用D命令观看数据段的内容
第三个单元用于存放较大的无符号数95H,运行正确
10Q 退出调试
思考题:
若将程序中的x1,x2看成带符号数,应修改哪条语句?最后结果为什么?。
4-12汇编语言基本程序设计——分支程序
汇编语言程序设计——分支程序分支结构程序设计条件语句串F T多路条件语句串1语句串n…条件F T语句串1语句串2【例1】编程实现比较三个有符号双字节数的大小,并将其中最大的数送入MAX 单元。
分支结构程序设计开始AX=XAX=Y MAX=AX 结束AX>YNAX>ZAX>ZYAX=NNZ YYDATA SEGMENT X DW 100HY DW -5Z DW 20 MAX DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AX…………MOV AH,4CHINT 21HCODE ENDSEND START分支结构程序设计MOV AX, XCMP AX, Y ;AX>Y?JG L1 ;AX>Y转L1MOV AX, Y ;AX=YCMP AX, Z ;AX>Z?JG L2 ;AX>Z转L2L0: MOV AX, Z ;AX=ZJMP L2 ;无条件转移到L2L1: CMP AX, Z ;AX>Z?JNG L0 ;AX<=Z转L0L2: MOV MAX,AX ;最大值AX送MAX分支结构程序设计Y =1 当X>00 当X=0-1 当X<0【例2】编程实现分段函数的求解。
开始AL=XAL=-1Y=AL 结束AL>=0NAL=0YAL=0YNAL=1DATA SEGMENT X DB -11;存放X Y DB ? ;存放YDATA ENDS 分支结构程序设计CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX, DATA MOV DS, AX …………MOV AH,4CH INT 21H CODE ENDS END STARTMOV AL,X CMP AL,0JGE BG ;X≥0 带符号数比较指令MOV AL,-1 ;X <0,-1送入Y 单元JMP EQBG: JE EQ ;ZF=1转移MOV AL,1 ;X >0,1送入Y 单元EQ: MOV Y,AL ;X=0, 0送入Y 单元分支结构程序设计【例3】设字节单元N1,N2中存放无符号数(1)若两个均是偶数,则分别加1后送D1,D2中(2)若两个均是奇数,则直接送D1 ,D2中(3)若一奇一偶,则把奇数送D1,偶数送D2AL←(N1),AH←(N2)(AL)0≠0FT(AH)0≠0AL←(AL)+1,AH←(AH)+1 AL (AH)D1←(AL),D2←(AH)TFMOV AL, N1MOV AH,N2TEST AL,01H JNZ L2;N1奇数转TEST AH,01H JNZ L1 ;N2奇数转INC AL ;两偶数INC AH JMP L2L1: XCHG AL,AH ;交换L2: MOV D1, AL;存放结果MOV D2, AH分支结构程序设计DATA SEGMENT N1 DB 11N2 DB 12D1 DB ?D2 DB ?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATAMOV DS, AX…………MOV AH,4CH INT 21H CODE ENDS END START。
汇编语言实验四+分支程序设计
实验四分支程序设计实验类型:验证性实验目的:1、掌握分支程序的设计方法2、掌握分支程序的控制方法。
实验步骤:1、进入DOS环境2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用3、启动EDIT编辑器输入程序代码4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm)5、运行命令MASM CHEN.ASM生成OBJ文件6、如果出错请回到第3步再纠正错误7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE文件8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容)9、执行反汇编U10、查看程序结束地址11、运行G 命令运行程序12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。
实验内容:编写程序统计某个班20个学生成绩:90-100,80-89,70-79,60-69,0-59各个分数段人数个数。
代码:data segmentscore db 56,69,84,82,73,88,99,63,100,80 s db 5 dup(?)data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov si,-1mov cx,10mov bx,0mov dx,1next:inc sicmp score[si],60jl next1cmp score[si],70jl next2cmp score[si],80jl next3cmp score[si],90jl next4add s[bx+4],dljmp next5next1: add s[bx],dljmp next5next2: add s[bx+1],dljmp next5next3: add s[bx+2],dl jmp next5next4: add s[bx+3],dl next5:loop nextretcode endsend start。
汇编(循环、分支、子程序)实验报告
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,
分支程序设计实验报告
分支程序设计实验报告
实验名称:分支程序设计实验报告
实验目的:通过分支程序设计的实验,深入理解程序运行的基本
原理,掌握分支语句的应用方法,提高编写程序的能力和水平。
实验原理:分支程序设计是一种基于逻辑运算的程序结构,它可
以根据不同的条件,选择不同的执行路径,从而实现程序不同的输出
效果。
实验过程:首先,确定需要实现的程序功能,并根据程序逻辑设
计分支语句。
然后,使用编程工具编写代码,调试程序,运行程序。
最后,对程序进行测试和优化,达到预期的效果。
实验结果:通过实验,我深入理解了分支程序设计的基本原理和
应用方法。
我能够设计和编写简单的分支程序,实现不同的输出结果。
我还学会了如何测试和优化程序,以达到最佳的执行效果。
通过实验,我提高了编写程序的能力和水平。
实验总结:分支程序设计是计算机编程中非常重要的一部分,掌
握分支语句的应用方法可以提高编写程序的效率和质量。
通过实验,
我能够利用分支语句来设计程序,实现复杂的逻辑运算和条件判断。
我对编程语言的掌握和应用能力也有了进一步的提高。
我相信,凭借
自己的勤奋努力和不断的实践,我一定能成为一名优秀的程序员。
分支结构程序设计(汇编语言)
汇编语言实验报告实验名称:分支结构程序设计姓名:学号:班级:一、实验内容1.将程序1输入、汇编、连接并通过Debug调试和检查运行结果。
2.修改程序1完成将其中的最小数存入MIN单元。
3.将编写好的程序2输入、汇编、连接并通过Debug调试和检查运行结果。
4.将编写好的程序3输入、汇编、连接并通过Debug调试和检查运行结果。
二、实验目的1. 掌握分支程序的结构。
2. 掌握分支程序的设计、编写及调试方法。
三、实验原理1、汇编语言源程序编制完成后,在计算机上的操作过程分为四个阶段:编辑、汇编、连接、运行调试(如图1)。
2、上机实验步骤:1)确定源程序的存放目录2)编辑ASM源程序3)用MASM.EXE汇编程序产生OBJ目标文件4)用LINK.EXE产生EXE可执行文件5)执行程序3、程序执行过程的跟踪可以用Debug来跟踪一个程序的运行过程,这通常是必须要做的工作。
我们写的程序在逻辑上不一定总是正确,对于简单的错误,仔细检查一下源程序就可以发现;而对于隐藏较深的错误,就必须对程序的执行过程进行跟踪分析才容易发现。
为了观察程序的运行过程,可以使用Debug。
Debug可以将程序加载入内存,设置CS:IP 指向程序的入口,但Debug并不放弃对CPU的控制,这样,我们就可以使用Debug的相关命令来单步执行程序,查看每一条指令的执行结果。
4 分支结构汇编语言中的分支结构式一种很常用的结构,就像我们高级语言中的if结构一样。
对一些需要判断的很有用。
四、实验过程1、实验环境汇编语言程序设计的实验环境如下:(1). 硬件环境微型计算机(Intel x86系列CPU)一台(2). 软件环境Windows98/2000/XP操作系统任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)汇编程序(MASM.EXE或TASM.EXE)调试程序(DEBUG.EXE或TD.EXE)文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE。
汇编语言(四)分支结构程序设计
汇编语言(四)分支结构程序设计分支结构是计算机程序设计中常用的一种控制结构,它根据一些条件的真假决定程序的执行路径。
在汇编语言中,我们可以使用条件分支指令来实现分支结构的程序设计。
常用的条件分支指令有以下几种:1.无条件跳转指令(JMP):该指令用于无条件跳转到指定的地址。
例如,JMPLABEL指令会跳转到LABEL标记的位置。
2.条件跳转指令:根据一些条件的真假决定是否跳转到指定的地址。
常用的条件跳转指令有以下几种:-跳转指令(JZ、JNZ):根据零标志位(ZF)的状态来判断是否跳转。
如果ZF为1,则跳转;如果ZF为0,则不跳转。
-跳转指令(JC、JNC):根据进位标志位(CF)的状态来判断是否跳转。
如果CF为1,则跳转;如果CF为0,则不跳转。
-跳转指令(JS、JNS):根据符号标志位(SF)的状态来判断是否跳转。
如果SF为1,则跳转;如果SF为0,则不跳转。
-跳转指令(JO、JNO):根据溢出标志位(OF)的状态来判断是否跳转。
如果OF为1,则跳转;如果OF为0,则不跳转。
-跳转指令(JP、JNP):根据奇偶标志位(PF)的状态来判断是否跳转。
如果PF为1,则跳转;如果PF为0,则不跳转。
-跳转指令(JA、JNA):根据无符号数比较结果来判断是否跳转。
如果无符号数比较结果为大于,则跳转;如果无符号数比较结果为小于或等于,则不跳转。
-跳转指令(JB、JNB):根据无符号数比较结果来判断是否跳转。
如果无符号数比较结果为小于,则跳转;如果无符号数比较结果为大于或等于,则不跳转。
-跳转指令(JAE、JNAE):根据无符号数比较结果来判断是否跳转。
如果无符号数比较结果为大于或等于,则跳转;如果无符号数比较结果为小于,则不跳转。
-跳转指令(JBE、JNBE):根据无符号数比较结果来判断是否跳转。
如果无符号数比较结果为小于或等于,则跳转;如果无符号数比较结果为大于,则不跳转。
-跳转指令(JE、JNE):根据有符号数比较结果来判断是否跳转。
汇编语言程序设计实验报告
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和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 文件名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言实验报告
Assembly Language Programming Lab Reports
______________________________________________________________________________
班级: _________ 姓名:___________ 学号:___________ 实验日期:_____________
学院: _____计算机与通信工程学院____ 专业:_______计算机科学与技术___________
实验顺序:___实验四____ 实验名称:____________分支程序设计________________ 实验分数:_______ 考评日期:________ 指导教师:
______________________________________________________________________________
一.实验目的
1.掌握主要的转移指令和位操作指令。
(1)无条件转移指令。
Jmp理解掌握段内寻址和段间寻址方式。
(2)条件转移指令,无符号数比较转移,带符号数比较转移,cx为0转移指令(jcxz)这
些都为短转移指令,当代码过长超出-128-127的的转移范围,学会使用无条件指令
作为中间桥梁完成相应的功能。
(3)Test指令和Cmp指令。
2.掌握分支程序实现的方法。
(1)在完成一个程序的功能时,先简单列出要完成这个程序需要的步骤。
(2)根据列出的步骤画出程序框图。
(3)根据框图写代码。
3.在调试运行程序时,理解程序的加载过程。
进一步掌握编辑、编译、链接、调试过程。
______________________________________________________________________________
二.实验环境
操作系统:windows xp
编译程序:masm 5.0
______________________________________________________________________________
三.实验原理
1.无条件转移指令
格式:JMP OPR
举例:JMP AA1
2.条件转移指令
格式:JZ、JNZ、JC、JNC
举例:JZ let1
3.逻辑与AND
格式:AND DST,SRC
举例:AND AL,0FH
4.循环左移,循环右移
格式:ROL、ROR
举例:ROL AX,1
ROR AL,1
5.CMP指令
格式:CMP OPR1,OPR2
执行操作:(OPR1)-(OPR2)
功能:该指令执行减法操作,但不保存运算结果,只改变条件标志位。
6.测试指令TEST
格式:TEST OPR1,OPR2
执行的操作:(OPR1)^(OPR2)
功能:两个操作数相与,结果不回送,改变标志位。
______________________________________________________________________________四.实验步骤及结果分析
1.用查表的方法将内存单元中的字用二进制表示
代码:
流程图:
2.用查表的方法将内存单元中的字用十六进制表示
代码:
流程图:
3. 将二进制显示和十六进制显示做成菜单栏形式(使用比较转移)
代码:
流程图:
4. 将二进制显示和十六进制显示做成菜单栏形式(使用分支表)
代码:
流程图:
____________________________________________________________________________五.实验心得疑问建议
通过本次实验增强了我们对汇编指令的熟悉程度,同时学会了使用分支语句实现一些具有选择功能的程序,理解了条件转移指令与无条件转移指令的区别,学会了使用多种方式实现菜单程序。