80X86汇编语言程序设计实验报告2
80X86汇编语言电子教案(3-2-MOV指令)
提供的基本寻址方式可以分为三类立即寻址寄存器寻址存储器寻址与存储器有关的寻址的有效地址由以下四种成分组成1位移量存放在指令中的一个81632位的数2基址存放在基址寄存器中的内容3变址存放在变址寄存器中的内容4比例因子386及后继机型增加的一个术语1无比例因子8086286386及后继机型共有位移量直接寻址基址或变址位移量基址或变址—基址变址寻址2带比例因子386及后继机型位移量变址比例因子比例变址寻址比例因子基址+比例因子说明这些寻址方式不仅可以用于源操作数的寻址也可以用于目的操作数的寻址唯一例外的是立即寻址只能用于源操作数例MOV [BX][DI]AX 则源操作数为寄存器寻址目的操作数为基址变址寻址存储器寻址时所确定的内存地址既可以是字节字也可以是双字地址那么上述指令的目的操作数的宽度是多少呢指令中操作数要具有明确的类型寄存器寻址类型确定存储器操作数寻址类型由变量的类型属性确定其它情况类型下操作数类型由指令中其它操作数的类型或指令缺省类型来确定确定的操作数为字类型指令指示对一定操作对象进行何种操作的命令指令系统计算机CPU的指令集合称为指令系统一指令集说明学习要求指令的基本功能二数据传送指令1通用数据传送指令2累加器专用传送指令3地址传送指令4标志寄存器传送指令5类型转换指令特点负责把数据地址或立即数传送到寄存器或存储单元中1通用数据传送指令1传送指令传送指令执行操作DSTSRC DST SRC 的类型要一致双字字节MOV AXMOV AH MOV AX MOV BXMOV MAST[BP][DI]MOV BL MOV BYTE PTR [BX]MOV DSMOV ES MOV AXMOV [BX]MOV DS例MOV EAX MOV ES 哪些指令为非法形式例MOV AXMOV AHMOV AXMOV BXMOV MAST[BP][DI]MOV BLMOV BYTE PTR [BX]MOV DSMOV ESMOV AXMOV [BX]MOV DS寄存器寄存器字寄存器寄存器字节存储器寄存器字存储器寄存器寄存器存储器字节立即数寄存器立即数存储器字节寄存器段寄存器存储器段寄存器段寄存器寄存器存储器存储器段寄存器段寄存器MOV ES立即数段寄存器MOV EAX存储器寄存器双字MOV CS AXMOV 5ALMOV EAX BX都是非法指令如为了使指令字不要过长规定双操作数指令的两个操作数中只能有一个使用存储器寻址方式因此不允许双存储器操作在有通用性MOV [BX]2带符号扩展传送指令有符号数的扩展MOVSX386及后继机型可用格式MOVSX DST, SRC执行操作本指令有两种格式REG1REG源操作数可以是或存储单元的内容目的操作数必须是功能传送时将源操作数符号扩展送入目的寄存器可以是位MOVSX3带零扩展传送指令无符号数的扩展MOVZX386及后继机型可用格式MOVZX DST, SRC执行操作本指令有两种格式REG1REG源操作数目的操作数MOVSX功能传送时将高位扩展为送入目的寄存器可以是位MOVSX例1MOVSX EAX 2MOVZX EAX 若执行前DATA =0FFE0H DATA 为字单元1EAX =0FFFFFFE0H 2EAX=0000FFE0H一般的双操作数指令源目的操作数的长度一致MOVZX MOVSX 指令的源操作数的长度一定要小于目的操作数的长度如MOVSX DXALMOVZX EBXAL 4堆栈操作指令堆栈PC 机的堆栈是在内存中开辟的一端固定一端活动的存储区采用的工作方式栈顶SP 或ESP 址由低注意 1.信息的存入和取出都是从栈顶开始中栈顶由指示当堆栈地址长度为位时堆栈操作使用SP 当堆栈地址长度为位时堆栈操作使用ESP为了将清楚堆栈操作指令我们分8086/8088803868086/8088 PUSH/POP进栈指令执行操作出栈指令执行操作例SP→SP→例SP→SP→ES)=2367H, (SP)=0100H,试画出堆栈的变化情况(SP)=100H12H12H例都是非法指令80386SP SP 2 ESP ESP 2 SP SP 4 ESP ESP 4 1616位位在实方式下803868086为编写80386及后继的程序可利用位通用寄存器可使用新增指令可采用新增的寻址方式但是段的最大长64KB 当存储单元的地址偏移超过64KB 时不会引起地址的反绕而导致段跨越异常在实方式下80386的兼容最大段为64称为位段在保护方式下段长可达4G 称为位段在实方式下运行的程序只能使用位段尽管在实方式下只能使用位段但可以使用位操作数也可以使用位形式表示的存储单元地址例MOV EAX关于实方式程序的几点说明为单位指令可以有四种格式不允许它使用立即数寻址方式指令允许三种格式能为字节类型5PUSHA/PU格式PUSHA286及后继PUSHAD386及后继执行操作PUSHA位通用寄存器依次入栈入栈次序为AX CX DX BX指令执行前的SP BP SI DISP SP-16PUSHAD位通用寄存器依次入栈入栈次序为EAX ECX EDX EBX指令执行前的ESP EBP ESI EDIESP ESP-326POPA/POP格式执行操作POPA位通用寄存器依次出栈出栈次序为DI SI BP SP BX DX CX AXSP SP+16POPAD位通用寄存器依次出栈出栈次序为EDI E SI EBP ESP EBX EDX ECX EAXESP ESP+32PUSHA POPA PUSHAD不影响标志位例例7交换交换指令执行操作OPR1OPR1OPR1例如XCHG EAX,EBX ; EAX 字AL 为要查找数据在表格2累加器专用传送指令EAX AX 传送信息IN OUT 输出程序设计中讲解换码指令格式执行操作累加器EAX AX AL例MOV BX, OFFSET TABLE ; (BX)=0040H长度不超过256)或EBX下标→(AL)3地址传送指令1LEA REG, SRC ;2LDS REG, SRC ;3LES REG, SRC ;4LFS REG, SRC ;5LGS REG, SRC ;6LSS REG, SRC ;把首地址偏移地址传送指令执行操作位有效地址位有效地址位有效地址截取低位有效地址零扩展后存入则MOV BX LEA BXBX =3412H BX=0100HBLOCK的区别假设0100H BLOCK =3412H 例值而不是该地址所在的存储单元的内容必须注意取地址到和寄存器指令执行操作或SREG ←位寄存器REG 不能是段R R LFS 段址偏移地址偏移地址段址例LDS SI, [10H]例LES DI, [BX]例TABLE DW 40H, 3000H , 2000HLSS ESP TABLE ;ESP=30000040H; (SS) =2000H4标志寄存器传送指令执行操作送标志寄存器指令执行操作(FLAGS标志进栈指令执行操作PUSHF: (SP)标志出栈指令执行操作LAHFSAHF例PUSHF TF=1TF15类型转换CBW AL的符号扩展到AH形成中的字CWD/CWDECWD AX的符号扩展到DX形成DX AX双字CWDE AX的符号扩展到EAX形成EAX双字CDQ EAX的符号扩展到EDX形成EDX EAXBSWAP 486及后继机型可用格式BSWAP R32 R32位寄存器操作将位寄存器的字节次序变反即14字节互换23字节互换指令合法的指令格式堆栈操作指令的指令与指令的区别掌握XCHG XLAT MOVSX MOVZX类型转换其余堆栈操作指令标志操作指令MOVSX作业。
汇编语言实验报告
合肥工业大学实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一. 实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二. 实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三. 实验过程和程序基础题:1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
附加题:1. 从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x2. 完成BX中1的个数的统计。
3. 用串操作指令将DS:0000开始20个字节初始化为:0CCH。
并将这20个字节的内容复制到其后的20个字节里。
四. 实验结果(包括必要的截图)基础题 1:基础题 2:附加题 1:附加题 2:附加题 3:五. 实验体会1. 在汇编语言中,变量的其实都是地址。
2. 在Debug中,数值都是16进制的。
3. 在读写内存中的数据时,必须指出数据类型是byte还是word。
80X86汇编程序设计实验教程共158页word资料
第1 汇编语言程序的运行方式汇编编语言是面向机器的低级语言,它的每条指令都是机器指令的助记符,其上机运行的方式常有两种:一是在借助程序调试工具DEBUG,编写小的汇编语言程序,直接在DEBUG环境下运行之。
二是借助文本编辑器编写汇编语言源程序,然后借助汇编器汇编生成目标代码,再连接生成可执行文件,在命令行(或命令提示符)下运行之。
1.1在DEBUG下运行汇编程序在MS-DOS、WINDOWS 98、WINDOWS 2000和WINDOWS XP中都提供有程序调试工具DEBUG,其文件名是DEBUG.EXE,可以在命令提示符“>”下运行之。
在进入DEBUG的提示符“-”之后,用户可以通过DEBUG的汇编命令输入汇编语言源程序,并将其汇编成机器语言程序加载存储到指定的地址空间,然后便可运行、调试输入的程序。
使用DEBUG运行汇编语言程序简单方便,但只能编写仅含一个代码段的小型程序,这对学习汇编语言的指令,了解、熟悉指令的功能带来极大的方便。
例1.1在DEBUG下运行如下程序:mov dl,33h ;字符“3”的ASCII码送dlmov ah,2 ;使用INT 21H的2号功能int 21h ;进入功能调用,输出“3”int 20h ;BIOS中断,结束当前程序,返回程序系统该程序运行结果是在显示器上输出一个字符“3”。
如果要输出其它字符,可以改变程序中送输入dl中的ASCII码。
下面我们给出在WINDOWS XP下运行该程序的步骤:图1 命令指符窗口⑴进入DEBUG运行附件下的命令提示符,如图1所示。
在提示符下输入DEBUG,即:C:\>debug<Enter>屏幕显示符“-”。
注:“<Enter>”表示按回车键。
⑵输入程序并汇编在DEBUG的指示符下用汇编命令a输入并汇编程序:-a 1000B25:0100 mov dl,33<Enter>0B25:0102 mov ah,2<Enter>0B25:0104 int 21<Enter>0B25:0106 int 20<Enter>0B25:0108<Enter>⑶运行程序用命令g运行输入的程序:-g=1003Program terminated normally说明:程序输入汇编完成后,可以生成一个在命令指示下直接运行的文件,然后在命令提示符下运行。
综合性的汇编语言程序设计实验
湘潭大学实验报告课程: 80X86汇编语言程序设计实验题目:综合性的汇编语言程序设计学院:信息工程学院专业: 14级计算机科学与技术二班学号: ********** *名:**指导教师:***完成日期: 2016.5.12一、实验内容开发一个总源代码行数不低于300行(或新代码行数不少于200行)的汇编语言程序以解决一个相对独立的局部应用问题。
二、实验环境硬件环境:一台微型计算机软件环境:Window7系统、debug环境、masm三、实验代码设计DATAS SEGMENT;此处输入数据段代码STRING1 DB'0: EXIT, 1: A+B, 2: A-B, 3: A*B, 4: A/B ','$'STRING2 DB'Please enter a number to have a choice :','$'STRING3 DB'Please enter A:','$'STRING4 DB'Please enter B:','$'STRING5 DB'You have chosed the A+B','$'STRING6 DB'You have chosed the A-B','$'STRING7 DB'You have chosed the A*B','$'STRING8 DB'You have chosed the A/B','$'STRING9 DB'Thanks for using ^U^ !','$'STRING10 DB'You enter the error number ! Please enter again.','$'STRING11 DB '--------------------------------------------------------------------------','$' NUM1 DW 0NUM2 DW 0DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSHUANHANG PROC NEAR ;换行子程序可用STR_CRLF DB0AH,0DH,'$'MOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21HRETHUANHANG ENDPJIAFA PROC NEAR ;加法子程序MOV DX,NUM1CALL PRINT ;调用数据以十进制输出子程序,把NUM1以十进制形式输出MOV DL,'+'CALL STDOUT ;调用输出子程序,把+号输出MOV DX,NUM2CALL PRINTMOV DL,'=';调用输出子程序,把=号输出CALL STDOUTMOV AX,NUM1ADD AX,NUM2MOV DX,AXCALL PRINTRETJIAFA ENDPJIANFA PROC NEAR ;减法子程序MOV DX,NUM1CALL PRINTMOV DL,'-'CALL STDOUTMOV DX,NUM2CALL PRINTMOV DL,'='CALL STDOUTMOV AX,NUM1MOV BX,NUM2SUB AX,BXMOV DX,AXCALL PRINTRETJIANFA ENDPCHENGFA PROC NEAR ;乘法子程序MOV DX,NUM1CALL PRINTMOV DL,'*'CALL STDOUTMOV DX,NUM2CALL PRINTMOV DL,'='CALL STDOUTMOV AX,NUM1MOV DX,0MUL NUM2MOV DX,AXCALL PRINTRETCHENGFA ENDPCHUFA PROC NEAR ;除法子程序MOV DX,NUM1CALL PRINTMOV DL,'/'CALL STDOUTMOV DX,NUM2CALL PRINTMOV DL,'='CALL STDOUTMOV DX,0MOV AX,NUM1DIV NUM2MOV DX,AXCALL PRINTRETCHUFA ENDPPRINT PROC NEAR ;数据以十进制输出子程序PUSH DXPUSH AXPUSH CXPUSH BXMOV CX,0DO:MOV AX,DXMOV DX,0MOV BX,10DIV BXXCHG AX,DXADD AL,30HPUSH AXINC CXCMP DX,0JNZ DODO1:POP AXMOV DL,ALCALL STDOUTLOOP DO1POP BXPOP CXPOP AXPOP DXRETPRINT ENDPSTDOUT PROC NEAR ;输出子程序MOV AH,2INT 21HRETSTDOUT ENDPSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码ONEAGAIN:;输入选择继续执行程序XOR AX,AXXOR BX,BXMOV NUM1,0;很重要的两步MOV NUM2,0;CALL HUANHANGCALL HUANHANGLEA DX,STRING11MOV AH,9INT 21HCALL HUANHANGLEA DX,STRING1 ;显示菜单MOV AH,9INT 21HCALL HUANHANGCALL HUANHANGLEA DX,STRING2 ;提示菜单的选择MOV AH,9INT 21HCALL HUANHANGCALL HUANHANGMOV AH,1 ;输入选择INT 21H;菜单选择。
80X86汇编语言程序设计 第二章⑧.8086 8088指令系统(五)转移指令
80X86汇编语言程序设计第二章8086/8088寻址方式和指令系统-(五)转移指令1.无条件转移指令(没有条件碰到就转)(1)无条件段内直接转移指令格式:JMP 标号这条指令使控制无条件地转移到标号地址处。
例如:NEXT:MOV AX,CX……JMP NEXT ;转到NEXT处……JMP OVER ;转到OVER处……OVER: MOV AX,1无条件段内直接转移指令格式如下:由操作码和地址差值构成。
指令的操作码| 地址差地址差:是程序中该无条件转移指令的下一条指令的开始地址到转移目标地址(标号所指定的开始地址)的差值。
因为,在执行无条件段内转移指令时,实际的动作是把指令中的地址差加到指令指针IP上,使IP之内容为目标地址,从而达到转移的目的。
段内无条件直接转移指令中的地址差可用一个字节表示,也可用一个字表示。
如果地址差只要用一个字节表示,就称为短转移;如果地址差要用一个字表示,就称为近转移。
段内短跳转:(-128~127)JMP SHORT QUEST段内近跳转:(64KB)JMP NEAR PTR PROG(2)无条件段内间接转移指令格式:JMP OPRD这条指令使控制无条件地址转移到由操作数OPRD的内容给定的目标地址处。
操作数OPRD可以是通用寄存器,也可以是字存储单元。
(3)无条件段间直接转移指令格式:JMP FAR PTR 标号这条指令使控制无条件地转移到标号所对应的地址处。
标号前的符号“FAR PTR”向汇编程序说明这是段间转移。
例如:JMP FAR PTR EXITEXIT是定义在另一个代码段中的标号。
无条件段间直接转移指令的具体动作时把指令中包含的目标地址的段值和偏移分别置入CS和IP。
这种在指令中直接包含转移目标地址的转移方式称为绝对转移。
(4)无条件段间间接转移指令格式:JMP OPRD这条指令使控制无条件地转移到由操作数OPRD的内容给定的目标地址处。
操作数OPRD必须是双字存储单元。
《汇编语言程序设计》实验报告
《汇编语言程序设计》实验报告班级:090342B学号:*********姓名:***指导教师:***实验日期:实验一实验题目Debug基本命令使用完成日期2011,3,29实验二实验题目汇编语言程序的上机过程完成日期2011,4,16实验三实验题目顺序程序设计完成日期2011,4,19实验四实验题目分支程序设计完成日期2011,4,28START:MOV AX,DATAMOV DS,AXMOV BX,BUFMOV CL,0COPA: AND BX,BXJE EXITSHL BX,1JNC COPAINC CLJMP COPAEXIT: MOV COUNT,CLMOV AH,4CHINT 21HCODE ENDSEND START四、实验结果(可以抓图粘贴)1.两数均为奇数时两数均为偶数时两数一奇一偶时2.3.4.五、本次上机的体会或收获在分支程序的编写过程中,最重要的是判断指令的选择和各部分程序段的逻辑顺序,其次是各种指令以及寻址方式的熟练运用。
这次实验反应出的问题有程序分支后不能汇合到应在的点,主要是因为考虑不周;还有由于自己的不经意,写错指令导致程序不能正常运行;此外,本次上机还让我体会到了程序验证的重要性,比如第一个程序的调试,由于没有调试所有可能出现的情况,导致在我誊写报告的时候出现了错误结果,后经改正才使得程序准确运行。
实验五实验题目循环程序设计完成日期2011,5,3end start四、实验结果(可以抓图粘贴)1.2.3.(1)字符串相等(2)字符串不相等4.5.六、本次上机的体会或收获通过本次实验,基本掌握了串操作指令的使用方法,同时对循环程序的多种设计有了进一步的了解和掌握。
在循环程序设计中,最重要的是对循环次数和循环终止条件的设置,只有二者得以正确设置,程序才能正确运行。
除此,程序书写时一定要注意固定部分的书写,确保固定语句的搭配无误。
实验六实验题目DOS中断调用程序设计完成日期2011,5,13四、实验结果(可以抓图粘贴)1.2.3.五、本次上机的体会或收获本次实验主要是对1号、2号、9号DOS功能的调用,通过实验加深了对中断功能调用的理解,但对于各功能连用时的操作还存在疑惑,尤其是该实验的第二题,程序的输出结果总会带有一些不相关的字符串。
西安交通大学-汇编语言-实验报告(2015)
汇编语言实验报告计算机xx班21x0505xxx xx2015年6月2日验结果第二题第三题第四题第五题验结果第七题:建议1.上机实验太少,可以考虑增加上机次数。
2.两次上机时间相隔太久,最好可以将上机时间提前。
3.可以增加一些选作的课程设计,满足不同需求的同学。
下附各个题目代码;第二题:data segmentm dw -1,0,0,1,-2,-3,-4,4max dw 0dizhi dw ?data endscode segmentmain proc farassume cs:code,ds:datamov ax,datastart: push dssub ax,axpush axmov ax,datamov ds,axlea bx,mmov cx,8t1: m ov ax,[bx]test ax,8000hjz t2neg axt2: c mp ax,maxjb t3mov max,axmov dizhi,bxt3: a dd bx,2loop t1mov ax,axretmain endpcode endsend start第三题:data segmentcount db 5 dup(0)data endscode segmentmain proc farassume cs:code,ds:datastart: mov ax,datamov ds,axs1: mov cx,10dcall fenleicall dispmov ax,4c00hint 21hretmain endpfenlei proc near input: mov ah,1int 21hcmp al,0dhjz exitsub al,30hcmp al,01hjb inputcmp al,05hja inputmov ah,0cbwmov bx,axdec bxinc count[bx]loop input exit: retfenlei endpdisp proc nearmov si,0mov bx,5s: mov dl,count[si]add dl,30hmov ah,2int 21hinc sidec bxcmp bx,0ja sretdisp endpcode endsend start第四题:data segmentscore dw 76,69,84,90,73,88,99,63,100,80 S6 dw 0S7 dw 0S8 dw 0S9 dw 0S10 dw 0code segmentmain proc farassume cs:code,ds:datastart: push dssub ax,axpush axmov ax,datamov ds,axs1: mov cx,10call fenleimov ax,1retmain endpfenlei proc nearmov si,0s2: mov ax,score[si]mov bx,10div blmov bl,alsub bx,6sal bx,1inc S6[bx];S6为S6,S7,S8,S9,S10的首地址add si,2;根据((socre)/10-6)*2决定该成绩送给哪一个单元loop s2retcode endsend start第五题:data segmentx db '123456'y db 0data endscode segmentmain proc farassume cs:code,ds:data start: push dssub ax,axpush axmov ax,datamov ds,axmov ax,2IF (y-x) gt 5rept 10add ax,axendmendifmov bx,1retmain endpend start第六题:datarea segmentM dw 0datarea ends;------------------------------program segmentmain proc farassume cs:program,ds:datarea start:push dssub ax,axpush axmov ax,datareamov ds,ax;get interrupt vectormov al,1chmov ah,35hint 21hpush espush bx;set interrupt vectorpush dsmov ax,seg countmov ds,axmov dx,offset count mov al,1chmov ah,25hint 21hpop ds;--------------------------int 1chint 1chint 1chint 1ch;in al,21h;and al,11111110b;out 21h,al;sti;------------------------;mov di,1000;delay:;dec di;jnz delay;reset interrupt vector pop dxpop dsmov al,1chmov ah,25hint 21hretmain endpcount proc nearstiinc Miretcount endpprogram endsend start第七题:data segmentscore db 7,5,9,1,3,6,8,0,2,4 buffer db 10 dup(1)data endscode segmentmain proc farassume cs:code,ds:data start: push dssub ax,axpush axmov ax,datamov ds,axmov si,0mov cx,10lea bx,scoreinput: mov ah,1int 21hcmp al,0dhjz exitsub al,30hjb inputcmp al,09hja inputxlat;[(bx)+(al)]->almov buffer[si],alinc siloop input exit: mov ax,axretmain endpcode endsend start。
IBM—PC(80x86)汇编语言与接口技术-第2章 80x86计算机组织
• 80386是1985年研制出的一个32位微处理器, 内部及外部数据总线均为32位,地址线也为32 位,因此它可处理4G(232)字节的物理存储 空间。
• 1989年Intel公司又研制出新一代的微处理器 80486,80486芯片内除了有一个与80386相同 结构的主处理器外,还集成了一个浮点处理部 件FPU以及一个8K字节的高速缓冲存储器 (cache),使80486的计算速度和总体性能比 80386有了明显的提高。
• Intel公司在1982年推出了80286微处理器,它仍 然是16位结构。80286的内部及外部数据总线都 是16位的,但它的地址线是24位的,可寻址16M 字节的存储空间。
80286有两种工作方式,即实模式和保护模式: 实模式与8086工作方式相同,但速度比8086快。
保护模式除了仍具有16M字节的存储器物理地址空 间外,她还能为每个任务提供1G字节的虚拟存储 器地址空间。保护方式把操作系统及各任务所分配 到的地址空间隔离开,避免程序之间的相互干扰, 保证系统在多任务环境下正常工作。
• 8086是1978年Intel公司推出的16位微处理器。
(1)8086有16位数据总线,处理器与外部传送数据 时,一次可传送16位二进制数。
(2)8086有20位地址总线,寻址空间提高到1M字节。
(3)8086采用了流水线技术,可以实现处理器的内 部操作与存储器或I/O接口之间的数据传送操作重叠 进行,从而提高了处理器的性能。
2.2 基于微处理器的 计算机系统的构成
硬件:
中央处理机 CPU
总线控制 逻辑 系 统 总 线
存储器
接口
...
接口
大容量 存储器
...
I/O设备
I/O子系统
汇编语言实验报告
80X86汇编语言程序设计实验报告姓名:学校:湖北工业大学学号:指导老师:金良海华科2009级计科二学位《汇编语言程序设计》第1次上机一、目的与要求学会汇编源程序的编辑、汇编、连接学会使用程序调试工具 TD.EXE熟悉几个常用的DOS功能调用二、实验内容1.《80X86汇编语言程序设计》教材中P85,例3.14。
2.《80X86汇编语言程序设计》教材中P299,7.4.3节(调试举例)。
三、实验过程1.【例3.14】阅读下列程序,并指出该程序执行后,显示器显示的结果是什么?.386DATA SEGMENT USE16BUF DB 0AH,0DH,'I WISH YOU SUCCESS!$'DATA ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXLEA DX,BUFMOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START【解答】1)新建文本文档,输入程序,文件名改为test.asm,保存到masm60根目录2)转到DOS:点击“开始”->“运行”,输入cmd (回车);3)用CD命令定位到masm60文件夹4)对test.asm文件进行汇编:masm test.asm5)链接:link test.obj6)运行:test.exe7)调试:td test.exe实验过程出现的问题:进行第4步时出现如图错误根据提示,发现原来是第三行的0DH误写为ODH,将其改正后,汇编成功【7.43】调试举例示例从键盘输入一个字符,若该字符为’1’,则在下一行输出字符串’1111111111!’后返回DOS;若该字符为’2’,则在下一行输出字符’2222222222!’后返回DOS;若该字符为其他字符,则在下一行输出字符串’Other Character!’后返回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:datareastart: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.对源文件汇编产生目标文件objD:\masm 文件名。
汇编语言实验报告
汇编语言实验报告引言:汇编语言作为低级语言之一,在计算机科学领域具有重要的地位。
本篇文章将围绕汇编语言的实验进行讨论,重点探索汇编语言在计算机编程中的应用和优势。
通过实际的实验过程,我们能够更加深入地认识汇编语言的特点和使用方法。
本报告将从实验的准备工作、实验的步骤、实验结果以及实验心得等方面进行论述。
实验准备:在开始实验之前,准备工作是非常重要的。
首先,我们需要下载安装合适的汇编语言开发环境,比如MASM或者NASM。
接着,我们需要理解汇编语言的基本知识,包括寄存器、内存和指令等的概念。
此外,我们还需要掌握一些基本的汇编语言指令,比如MOV、ADD、SUB等。
这些准备工作对于我们能够顺利进行实验具有关键性的作用。
实验步骤:在实验过程中,我们经历了一系列的步骤,下面将一一进行介绍。
1. 确定实验目标:在进行实验之前,我们需要明确实验的目标和要达到的结果。
比如,我们可以选择实现一个简单的计算器程序,能够实现基本的加减乘除运算。
这样的目标可以帮助我们更好地理解汇编语言的使用方法和语法规则。
2. 编写代码:在明确了实验目标之后,我们开始编写汇编语言代码。
首先,我们需要定义一些变量和常量,以便在程序中使用。
然后,我们根据实验目标,逐步编写实现相应功能的代码段。
在这个过程中,我们需要注意汇编语言的特点,比如大小写敏感、指令的书写格式等。
3. 调试程序:编写完代码后,我们需要对程序进行调试,以确保其功能的正确性。
在调试过程中,我们会使用一些调试工具,比如调试器,帮助我们找出代码中的错误并进行修复。
通过调试,我们能够提高代码的质量和效率。
4. 运行程序:在完成调试之后,我们开始运行程序,观察程序的运行结果。
通过不断运行和测试,我们可以检验程序的正确性和可靠性。
如果程序能够输出我们预期的结果,那么说明我们的实验成功了。
实验结果:在我们进行实验的过程中,我们获得了一些令人满意的结果。
通过编写汇编语言代码,我们成功实现了一个简单的计算器程序。
《80x86汇编语言程序设计》(第2版)习题答案
习题参考答案1第1章1-1汇编的主要功能:输入:汇编语言源文件输出:目标文件处理:对源文件进行语法检查;将符号指令翻译为机器指令。
连接的主要功能:输入:1个或多个目标文件与库文件输出:可执行文件处理:浮动地址的重定位;多模块的连接。
1-2 (1)2EH (2)0D2H (3)0FFH(4)80H (5)7FH (6)0FEH1-3 (1)7FH (2)0FF80H (3)0FFFFH285286(4)0FFD2H (5)8000H (6)0FFH1-4 无符号数范围:0~2n-1;带符号数范围:-2n−1~2n−1-11-5 (1)压缩BCD码:58H;非压缩BCD码:x5x8H。
(2)压缩BCD码:1624H;非压缩BCD码:x1x6x2x4H。
1-6 (1)字符'1'的ASCII码;十进制数31的压缩BCD码;十进制数1的非压缩BCD码;十进制数49的十六进制表示。
(2)十进制数-1的8位二进制补码表示;带符号数255的16位二进制补码表示;无符号数255的8位二进制形式。
(3)十进制数-1的16位二进制补码表示;带符号数65535的32位二进制补码表示;无符号数65535的16位二进制形式。
1-7 (1)作为无符号数为159,等值的16位和32位形式均为9FH;作为带符号数为-97,等值的16位和32位形式分别为0FF9FH与0FFFFFF9FH。
(2)作为无符号数和带符号数均为104,等值的16位和32位形式均为68H。
(3)作为无符号数为192,等值的16位和32位形式均为0C0H;作为带符号数为-64,等值的16位和32位形式分别为0FFC0H与0FFFFFFC0H。
1-8 (1)AND 0FH (2)OR 30H(3)右移4位可得高位的值;将原值AND 0FH可得低位的值。
(4)XOR 00101010B(5)AND 8000H,若结果为0,则是正数,否则为负数。
第2章2-1 系统总线是CPU与内存和I/O子系统之间进行数据交换的通道,包括数据总线、地址总线和控制总线,分别负责在CPU与内存和I/O子系统之间传送数据、地址和控制信息。
汇编语言顺序程序设计实验报告
实验名称:汇编语言顺序程序设计实验报告实验目的:通过本次实验,学生能够掌握使用汇编语言编写顺序程序的基本方法,理解汇编语言的基本结构和运行机制。
实验内容:1. 汇编语言基础知识1.1 汇编语言的概念1.2 汇编语言的特点1.3 汇编语言的应用领域2. 汇编语言程序设计2.1 程序设计的基本流程2.2 程序设计的基本步骤2.3 汇编语言程序设计的规范与技巧3. 实验步骤3.1 确定实验题目和要求3.2 分析实验任务,设计程序流程图3.3 编写汇编程序3.4 调试程序,确保程序正确运行3.5 编写实验报告4. 实验报告要求4.1 实验题目4.2 实验目的4.3 实验内容和步骤4.4 程序设计思路和实现方法4.5 实验结果分析和讨论4.6 实验心得体会实验过程:1. 确定实验题目和要求本次实验的题目为“汇编语言顺序程序设计”,要求学生使用汇编语言编写一个顺序程序,实现指定的功能要求。
2. 分析实验任务,设计程序流程图在开始编写汇编程序之前,我们首先要明确实验的功能需求,然后设计程序的流程图,规划程序的整体结构。
3. 编写汇编程序在设计好程序流程后,根据汇编语言的语法规则,编写相应的程序代码,并确保程序的逻辑正确,语法无误。
4. 调试程序,确保程序正确运行编写完成程序后,需要对程序进行调试,逐步检查程序运行过程中的各个环节,发现并修复可能存在的错误。
5. 编写实验报告我们需要撰写本次实验的实验报告,详细记录实验的整体过程,包括程序设计思路、程序实现方法、实验结果分析和讨论,以及实验心得体会。
实验结果分析和讨论:经过本次实验,我们掌握了汇编语言顺序程序设计的基本方法和技巧,了解了汇编语言程序设计的规范和要求。
在实验过程中,我们遇到了一些问题和困难,但通过不懈的努力和团队合作,最终成功完成了实验任务,并取得了令人满意的成绩。
实验心得体会:通过本次实验,我们深刻认识到汇编语言在计算机领域中的重要性和应用价值,同时也意识到汇编语言程序设计的复杂性和技术挑战。
第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令
DI,200H CX,128 AX,AX STOSW
当然也可以用字节填充 可以使用重复前缀。 当寄存器AL、AX中的数不变 BBB: CLD LEA DI,0500H 时,使用重复前缀,则是对 某一RAM区域进行填充。 MOV CX,256 例如上电复位后,对某一块内 XOR AL,AL 存区域全部填充0 REP STOSB
GLUT_C 2013-08 25
④ 段间直接转移
格式: JMP FAR PTR dst 功能:用dst给出的段内偏移量代替IP,用dst的段地址代替 CS的内容,转移到新的CS: 偏移地址去执行下一条指令。 注意:在汇编语言程序设计中,dst通常使用符号地址。
例如:
MOV JMP AX, [SI] FAR PTR ABCD
GLUT_C
2013-08
8
例:比较1000:0e00H与1000:0400H连续8字节是否相等,只要有 一个不相同的字节,则设置AL=0A5H表示两个字符串不想等,否 则赋值AL=00H。
CMP_S: MOV MOV MOV MOV MOV CLD MOV REPZ JNZ MOV JMP DONE: MOV CMP_END: RET
8086指令系统(续)
GLUT_C
2013-08
1
2.3.5
串操作指令
串操作指令在教材P.128 字符串传送指令 字符串比较指令 字符串检索指令 取字符串指令 存字符串指令
GLUT_C
2013-08
2
1.字符串传送指令 字符串传送指令MOVSB/MOVSW 格式: MOVSB ;用于字节传送 MOVSW ;用于字传送。 特点: ( 1 ) MOVSB 、 MOVSW 指令,源数据串的默认段 基址 DS ,有效地址为 SI ,目的串段基址 ES ,有效 地址DI。 (2)指令前面常加重复前缀REP,重复执行n次。 (3)重复执行次数 由CX指定 (4)每次传送,DI,SI自动修改(字节传送±1,字 传送±2),加减由方向控制为DF确定。
(完整版)汇编语言程序设计实验篇(emu8086),推荐文档
按钮,保存相应的程序段。
2. EXE TEMPLATE 程序
本章与 DOS 功能调用和汇编源程序相关的实验都是用 EXE TEMPLATE 程序完成的。
打开 emu8086,在“welcome…”对话框中,单击
按钮,创ቤተ መጻሕፍቲ ባይዱ文件。
我去人也就有人!为UR扼腕入站内信不存在向你偶同意调剖沙
在“choose code template”对话框中,选择“EXE template-advanced executable
3. 实验原理
通用数据传送指令包括:1)通用数据传送指令,如 MOV,PUSH,POP,XCHG,CBW,CWD;2)目标地址传送指令,如 LDS,LES;3)标志传送指令,如 LAHF,SAHF,PUSHF,POPF;4)输入输出指令,如 IN,OUT,LEA
寻址方式包括:1)立即寻址;2)直接寻址;3)寄存器寻址;4)寄存器间接寻值; 5)寄存器相对寻址;6)基址-变址寻址;7)基址—变址—相对寻址;8)隐含寻址
逻辑运算指令包括:AND,OR,NOT,XOR,TEST
4. 实验内容
(1)创建 COM TEMPLATE 程序,输入以下程序段,单步执行并记录标志位的变化情况
(提示:在 emulator 对话框中,单击
按钮察看标志寄存器的值)。程序段及结果表
格如表 1-2。 表 1-2 算术逻辑运算实验结果表格
标志位 CF ZF SF OF PF AF
4. 实验内容
(1)创建 COM TEMPLATE 程序,输入以下程序段,观察程序的执行情况,程序段如下:
MOV BL,08H
;BX=?
MOV CL,BL
;CL=?
MOV AX,03FFH
80X86汇编语言程序设计 实验报告2
80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第二次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 加深对常用DOS功能调用指令的理解;(3) 进一步熟悉TD的使用。
二、实验内容1、《80X86汇编语言程序设计》教材中 P45的 2.3题。
要求:(1) 分别记录执行到“MOV CX,10”和“INT 21H”之前的(BX), (BP),(SI),(DI)各是多少。
(2) 分别记录程序执行初期与退出之前数据段开始40个字节的内容,指出运行结果是否与设想的一致。
2、《80X86汇编语言程序设计》教材中 P45的 2.4题。
要求:(1) 实现的功能不变。
(2) 内存单元中数据的访问采用变址寻址方式。
(3) 记录程序执行到退出之前数据段开始40个字节的内容,检查程序运行结果是否与设想的一致。
3、编写程序利用DOS 10号功能调用输入一个字符串,统计字符串中字符0、1、…、9出现的次数并显示出来(假设每个字符最多出现9次,若大于9次则显示为x)。
三、实验步骤及结果1、输入源程序,如下:.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDA TA SEGMENT USE16BUF1 DB 0,1,2,3,4,5,6,7,8,9BUF2 DB 10 DUP(0)BUF3 DB 10 DUP(0)BUF4 DB 10 DUP(0)DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DA TA,SS:STACKSTART: MOV AX,DA TAMOV DS,AXMOV SI,OFFSET BUF1MOV DI,OFFSET BUF2MOV BX,OFFSET BUF3MOV BP,OFFSET BUF4MOV CX,10LOPA: MOV AL,[SI]MOV [DI],ALINC ALMOV [BX],ALADD AL,3MOV DS:[BP],ALINC SIINC DIINC BPINC BXDEC CXJNZ LOPAMOV AH,4CHINT 21HCODE ENDSEND START(1)进行单步调试。
《汇编语言程序设计》实验报告二n
实验报告课程名称汇编语言程序设计实验项目实验二、分支与循环程序结构和设计实验仪器微机系统、汇编调试环境系别专业班级/学号学生姓名实验日期成绩指导教师宋平实验二分支与循环程序结构和设计一、实验目的1.学习汇编程序设计的基本方法,掌握用汇编语言设计、编写、调试和运行程序的方法;2.熟悉汇编语言源程序的编辑和汇编、目标模块的连接以及可执行程序的调试;3.熟悉、掌握顺序结构、分支结构、循环结构程序设计和调试。
二、实验要求1.Windows操作系统并具有命令提示符操作界面的计算机,且系统内安装有汇编语言编程环境;2.在开始本实验之前,复习教科书的相关内容,并预先写出相应的源程序;3.通过汇编IDE上机调试,注意观察,并记录下现象;4.学会顺序结构程序设计、分支结构程序设计、循环结构程序设计;5.通过本实验掌握汇编语言程序调试的具体步骤;6.通过查看存储单元和寄存器的内容掌握程序的运行结果。
三、实验内容1.编辑源文件【使用文本编辑器编辑具有下列功能源文件,并将该文件存入一指定的“实验文件夹”(如D:\4123\4123-2\4123-2-1.asm),分别编辑要求的源程序(共三个功能文件,涵盖顺序、分支、循环等基本程序结构)。
】2. 汇编源文件、连接目标文件,生成可执行文件操作步骤如下:(1)建立独立的实验文件夹【将源程序文件、汇编和连接工具程序(MASM.EXE、LINK.EXE)复制到同一实验文件夹】(2)TPC-USB集成开发环境【参阅“TPC-USB学生实验指导书.pdf”文档第21页开始处的说明】(3)汇编与连接操作【参阅“TPC-USB学生实验指导书.pdf”文档第21页开始处的说明当汇编和连接后出现错误提示时,请按提示位置和信息修改后保存,并重新执行汇编和连接,直至没有严重错误。
】3. 调试【参阅“TPC-USB学生实验指导书.pdf”文档用TPC-USB集成开发环境中的编译连接、启动调试/执行、单步执行、跳过、连续执行等命令调试程序,观察指令执行过程中各语句执行后的状况及程序运行结果。
80X86汇编语言程序设计 实验报告3
80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第三次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 掌握基本的程序设计方法;(3) 进一步熟悉TD的使用。
二、实验内容1、《80X86汇编语言程序设计》教材中 P96的 3.11 题。
(1)请事先指出程序运行结束后,显示器显示的内容。
(2)若将NUM的定义改成如下形式:NUM DB 35显示的结果是什么?(3)若将NUM的定义改成如下形式:NUM DB 59显示的结果是什么?(4)若将NUM的定义改成如下形式:NUM DB 75显示的结果是什么?(5)修改该程序,使之能够以16进制形式显示NUM单元中的内容。
2、设在一个缓冲区BUF1中存放了一个串“123GOOD”, 将其以相反顺序拷贝到另一个缓冲区BUF2中。
(用TD观察程序执行前后的数据区,并记录下来)3、输入一个十进制数字串(假定是无符号的),以四位十六进制的形式输出该串对应的值。
例如:Input: 123↙Output: 007BH要求:(1) 画出程序流程图,给出寄存器、存储单元的分配方法;(2) 给出完整的程序清单,有必要的注释。
三、实验步骤及结果1、(1)、程序运行完之后,得到的结果为:(NUM)=39H。
(2)、程序运行完之后,得到的结果为:(NUM)=23H。
(3)、程序运行完之后,得到的结果为:(NUM)=3;H。
(4)、程序运行完之后,得到的结果为:(NUM)=4;H。
(5)、修改后的程序段如下:C1 SEGMENT USE16 ASSUME DS:A1, SS:B1, CS:C1 BEGIN: MOV AX,A1MOV DS,AXLEA DI,BUF0MOV AL,NUMSHR AL,4CMP AL,0AHJAE L1OR AL,30HMOV [DI],ALL2: INC DIMOV AL,NUMAND AL,0FHCMP AL,0AHJAE L3OR AL,30HMOV [DI],ALL4: INC DIMOV BYTE PTR [DI],'H'INC DIMOV BYTE PTR [DI],'$'LEA DX,BUFMOV AH,9INT 21HMOV AH,4CHINT 21HL1: MOV BYTE PTR [DI],'0'INC DISUB AL,0AHADD AL,'A'MOV [DI],ALJMP L2L3: SUB AL,0AHADD AL,'A'MOV [DI],ALJMP L4C1 ENDSEND BEGIN运行后的结果如下:①、当NUM为35时:②、当NUM为59时:③、当NUM为75时:④、当NUM为0ACH时:2、编写的程序如下:.386DATA SEGMENT USE16BUF1 DB '123GOOD$'BUF2 DB 0DATA ENDSSTACK SEGMENT USE16 STACK STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV DI,OFFSET BUF1MOV BX,OFFSET BUF2MOV CL,[BX]LOPA: MOV DL,[DI]CMP DL,'$'JE L1INC DIJMP LOPAL1: CMP DI,0JE EXITDEC DIMOV DL,[DI]MOV CL,DLMOV [BX],CLINC BXJMP L1EXIT: MOV CL,'$'MOV [BX],CLLEA DX,BUF2MOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START运行后的结果如下:运行程序前数据区显示为:运行程序后数据区显示为:3、①、画出流程图如下:开始输入一个数字串将输入的数字串转化为10进制数存储。