汇编语言实验四

合集下载

汇编语言实验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、学习编写加法和乘法运算程序。

二、实验内容1、二进制运算计算23579+7684和0A5H+34H(1)原始数据分别存于A、B、C、D开始听内存单元中,运算结果分别存E、G开始的内存单元中。

(低位数在低字节中)(2)前两个数据在程序中用十进制表示,后两个数据在程序中用十六进制表示。

(3)十进制数定义成字变量,用16位加法。

十六进制数定义成字节变量,用8位加法。

2、多字节加法在内存中以FIRST和SECOND开始的单元中分别存放有两个10位压缩型十进制数(BCD 码),低位在前。

求这两个数的压缩十进制数和,并存到THIRD 开始的单元中。

(1)压缩十进制数亦称组合十进制数,一个字节存放二位BCD 码。

(2)两个加数可直接直接在程序中设置。

3、二进制乖法(1)在内存DATA1和DA TA2单元中分别存放着两个8位无符号二进制数A和B 。

求AXB,结果存于DATA3开始的内存单元中。

(2)在FIRST和SECOND开始的内存单元中,分别存放着两个16位带符号二进制数D和E,求DXE,结果存于THIRD开始的内存单元中。

三、实验准备1、仔细阅读本实验教材。

2、认真预习加法、乖法和十进制调整指令。

精心设计运算使用的实验数据。

(注意:应准备多组不同数据以备实验。

)3、根据实验内容,分别画出各个程序的流程图,并在实验前编好各个源程序。

四、实验步骤1、二进制数运算(1)题目的具体要求,将原始数据及存放结果的内存单元分别定义成字变量或字节变量。

(2)辑程序,把编写好的源程序建立为汇编语言源程序文件并存盘。

(3)对源程序文件进行汇编、连接,且修改至无错误,然后运行程序。

(4)利用调试程序观察运行结果。

如果有错,分析并找出错误原因,改写程序并重新调试。

2、多字节加法程序(1)在FIRST 和SECOND开始的内存单元中建立各为10位的压缩型BCD码的数据区,数据要选择得当。

汇编语言实验报告1~7

汇编语言实验报告1~7

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

汇编实验四报告

汇编实验四报告

汇编语言程序设计实验报告班级:计科1班学号:姓名:实验日期2015.11.2 成绩实验四子程序设计采用子程序设计,结合分支,循环程序设计,通过调用输入子程序,实现从键盘输入一个数组,然后调用显示子程序显示所输入的数组。

程序框图:程序清单:DATA SEGMENTBUF DB 7 DUP(?)N DB 2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,BUF ;BUF首地址送给SIMOV CX,7L1:CALL KeyinBL ;调用KeyinBL输入子程序MOV [SI],BLCALL SkipN ;调用SkipN空格子程序INC SI ;SI+1DEC CXJNZ L1CALL CRLH ;调用CRLH子程序MOV CX,7LEA SI,BUFL2:MOV BL,[SI]CALL DisplayBL ;调用KeyinBL输入子程序CALL SkipN ;调用SkipN空格子程序INC SIDEC CX ;CX-1JNZ L2 ;≠0则转到L2MOV AH,4CHINT 21HCRLH PROCMOV DL,0AH ;换行MOV AH,2 ;显示一个字符(2号功能)INT 21HMOV DL,0DH ;回车MOV AH,2 ;显示一个字符(2号功能)INT 21HRETCRLH ENDPSkipN PROCPUSH CX ;CX压栈MOV CX,2SK:MOV DL,20H ;空格的ASCII码MOV AH,2INT 21HDEC CX ;CX-1JNZ SK ;≠0则转SKPOP CX ;CX出栈RETSkipN ENDPKeyinBL PROCPUSH CXMOV BL,0 ;将BL寄存器清0MOV CH,2 ;循环次数为2次MOV CL,4 ;移位位数为每次移4位K2:SHL BL,CL ;将BL中的数左移四位MOV AH,1 ;从键盘输入一个数(1号功能)INT 21HSUB AL,30H ;减30HCMP AL,0AH ;比较AL与0AJB K1 ;小于则转到K1SUB AL,7K1:OR BL,AL ;BL和AL相或DEC CHJNZ K2 ;≠0则转K2POP CXRETKeyinBL ENDPDisplayBL PROCPUSH CXMOV CH,2MOV CL,4D2:ROL BL,CLMOV DL,BLAND DL,0FH ;DL˄0F相与ADD DL,30H ;DL+30HCMP DL,3AH ;如果DL<3AHJB D1 ;则转到D1ADD DL,7 ;加7D1:MOV AH,2 ;显示一个字符(2号功能)INT 21HDEC CHJNZ D2 ;≠0则转D2RETPOP CXDisplayBL ENDPCODE ENDSEND STARTCODE ENDSEND START运行结果:运行结果图内存图实验总结:。

《汇编语言》实验报告

《汇编语言》实验报告

《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。

实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。

汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。

本实验通过编写汇编语言程序,加深对汇编语言的理解。

二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。

2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。

3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。

b.设置段寄存器,将数据段地址加载到DS寄存器中。

c.设置显示模式和光标位置。

d.将字符串逐个字符输出到屏幕上。

e.关闭显示模式。

4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。

5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。

三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。

通过程序分析和调试过程,加深了对汇编语言的理解和掌握。

四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。

通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。

同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。

在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。

总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。

汇编 子程序设计

汇编 子程序设计

实验四子程序设计一、实验目的(1)掌握汇编语言子程序设计方法。

(2)掌握主程序与子程序之间的调用关系及调用方法。

(3)掌握通过寄存器传送参数的方法。

二、实验环境(1) 硬件环境:计算机系统windows;(2) 软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验内容(方法步骤):编程实现:十进制到十六进制数转换程序。

程序要求:从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。

四、实验说明(1) 键盘输入的十进制数(ASCII),要将它转换成二进制存放。

⇒子程序:DECIBIN(2) 二进制转换成十六进制数并显示⇒子程序:BINIHEX(3) 为避免屏幕上的重叠,必须有回车和换行功能。

⇒子程序:CRLF用三个子程序联合实现题目要求⇒联合由主程序达到。

将BX寄存器作为过程之间传送转换数据的“交通员”。

五、实验步骤(1)编辑、汇编源程序,生成相应的可执行文件(.EXE)(2)检查程序执行的结果是否正确。

六、流程图主程序流程图如下图:子程序CRLF流程图如下图:子程序DECIBIN流程图如下图:子程序BINIHEX流程图如下图:七、源程序data segmentdata endscode segmentassume cs:code,ds:data main:call DECIBINcall CRLFcall BINIHEXmov ah,4Chint 21hDECIBIN PROCMOV BX,0NEWCHAR:MOV AH,1INT 21HSUB AL,30HJL EXITCBWXCHG AX,BXMOV CX,10DMUL CXXCHG AX,BXADD BX,AXJMP NEWCHAR EXIT:RETDECIBIN ENDPCRLF PROC NEARMOV AH,02HMOV DL,0AHINT 21HMOV AH,02HMOV DL,0DHINT 21HRETCRLF ENDPBINIHEX PROC NEAR START:MOV CH,4NOTATE:MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AHJL PRINTITADD AL,7HPRINTIT:MOV DL,ALMOV AH,2INT 21HDEC CHJNZ NOTATERETBINIHEX ENDPcode endsend main八、问题思考(1)当输入“#”时,退出主程序,如何修改程序?(2)说明用寄存器传送参数的过程及其具体方法,各子程序的应用。

汇编语言程序设计实验四:8086标志寄存器及中断

汇编语言程序设计实验四:8086标志寄存器及中断

汇编语⾔程序设计实验四:8086标志寄存器及中断实验任务1task1.asm源码:assume cs:code, ds:datadata segmentx dw 1020h, 2240h, 9522h, 5060h, 3359h, 6652h, 2530h, 7031hy dw 3210h, 5510h, 6066h, 5121h, 8801h, 6210h, 7119h, 3912hdata endscode segmentstart:mov ax, datamov ds, axmov si, offset xmov di, offset ycall add128mov ah, 4chint 21hadd128:push axpush cxpush sipush disub ax, axmov cx, 8s: mov ax, [si]adc ax, [di]mov [si], axinc siinc siinc diinc diloop spop dipop sipop cxpop axretcode endsend start关于add指令的调试过程截图如下:由图可知add指令使得ZF标志位由NZ变为ZR,CF标志位由NC变为CY,可知运算结果为0且在运算中由最⾼位向更⾼位产⽣了进位。

关于inc指令的调试过程截图如下:由图可知inc指令使得ZF标志位由NZ变为ZR,可知运算结果为0,⽽CF未曾改变。

line31~line34的4条inc指令,不能替换成如下代码,原因是:该题⽤adc指令进⾏⼤整数加法,期间需要⽤到CF标志位的数值,⽽上⾯已经验证过add指令会对CF标志位产⽣影响,故不能替换。

add si, 2add di, 2128位加之前数值截图:完成128位加之后数值截图(有变化):实验任务2task2.asm源码:assume cs:code, ds:datadata segmentstr db 80 dup(?)data endscode segmentmov ds, axmov si, 0s1:mov ah, 1int 21hmov [si], alcmp al, '#'je nextinc sijmp s1next:mov ah, 2mov dl, 0ahint 21hmov cx, simov si, 0s2: mov ah, 2mov dl, [si]int 21hinc siloop s2mov ah, 4chint 21hcode endsend start运⾏结果截图:line11-18:获取键盘输⼊的值并赋值给ds:[si] ,若为“#”,则跳转到next处,否则si++后再次重新进⼊本循环。

实验四 二进制加、减法实验

实验四  二进制加、减法实验

实验四二进制加、减法实验一、实验要求和目的1.熟悉汇编语言二进制多字节加法基本指令的使用方法;2.熟悉汇编语言二进制多字节减法基本指令的使用方法;3.掌握汇编语言编程的一般结构。

二、软硬件环境1.硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;2.软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。

三、实验涉及的主要知识单元1、二进制加法基本指令(1)ADD指令格式:ADD DST,SRC该指令把源操作数(SRC)指向的数据与目的操作数(DST)相加后,将结果放到目的操作数(DST)中,所执行的操作:(DST)←(SRC)+(DST)SRC和DST不能同时为存储器操作数和段寄存器,同时SRC和DST的数据类型要匹配,要同是字节或字。

受影响的标志位有:OF,SF,ZF,AF,PF,CF。

(2)ADC指令格式:ADC DST,SRC所执行的操作:(DST)←(SRC)+(DST)+CF 了解清楚进位是怎样加的该指令把两个操作数(SRC和DST)相加以后,再加上进位标志CF,将结果放到目的操作数(DST)中。

受影响的标志位有:OF,SF,ZF,AF,PF,CF。

ADC指令多用于多精度数据相加。

2、二进制减法基本指令(1)SUB指令格式:SUB DST,SRC所执行的操作:(DST)← (DST)-(SRC)该指令把源操作数(SRC)指向的数据与目的操作数(DST)相减后,将结果放到目的操作数(DST)中,SRC和DST不能同时为存储器操作数和段寄存器(,同时SRC和DST的数据类型要匹配,要同是字节或字。

受影响的标志位有:OF,SF,ZF,AF,PF,CF。

(2)SBB指令格式:ADC DST,SRC(DST)← (DST)-(SRC)-CF 了解清楚进位是怎样减的该指令把两个操作数(SRC和DST)相减以后,再减去CF,将结果放到目的操作数(DST)中。

受影响的标志位有:OF,SF,ZF,AF,PF,CF。

汇编第四次实验报告

汇编第四次实验报告

实验四字符及字符串的输入和输出一、实验目的1.熟悉如何进行字符及字符串的输入输出。

2.掌握简单的DOS系统功能调用。

二、实验预习要求1.复习系统功能调用的1、2、9、10号功能。

2.按照题目要求预先编写好实验中的程序段。

三、实验任务1.输入以下程序段并用F8键单步运行,执行INT 21H指令时,在键盘上按“5”键。

MOV AH,1INT 21H(1)运行结束后,(AL)=?它是哪一个键的ASCII码?(AL)=35。

他代表的是5的ASCII码。

(2)重复运行以上程序段,并分别用“A”、“B”、“C”、“D”键代替“5”键,观察运行结果有何变化?“A”、“B”、“C”、“D”分别是得到41、42、43、44.他们分别是A、B、C、D的ASCII码值。

2.在DS:1000H开始的内存区域设置如下键盘缓冲区:DS:1000H 5,0,0,0,0,0,0然后输入以下程序段并用F8键单步运行,执行INT 21H指令时,在键盘上键入“5”、“4”、“3”、“2”、“1”、〈回车〉这六个键。

LEA DX,[1000H]MOV AH,0AHINT 21H程序段运行完后,检查DS:1000H开始的内存区域:(1)DS:1001H单元的内容是什么?它表示了什么含义?DS:1001H内容为04H,他表示实际输入的字符个数。

(2)从DS:1002H开始的内存区域中的内容是什么?其中是否有字符“1”的ASCII码?为什么?从DS:1002H开始的内存区域中的内容分别是5、4、3、2和回车键的ASCII码。

其中没有字符“1”的ASCII码,因为实际长度只有4位,其中有一位是回车键,所以没有字符“1”的ASCII码。

3.输入以下程序段并运行之。

MOV DL,‘A’MOV AH,2INT 21H(3)观察屏幕上的输出,是否显示了“A”字符?显示了A了。

(在敲入代码的时候不可以直接敲入‘A’,而应该是敲入A的ASCII码即41)如下图:(4)分别用“#”、“X”、“Y”、“$”、“?”代替程序段中的“A”字符,观察屏幕上的输出有何变化。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告实验一汇编语言的源程序的输入一、实验目的1.通过实验了解和熟悉微机系统的配置2.学习在DEBUG状态下输入汇编源程序的方法3.初步掌握调试(在DEBUG状态下)的过程二、实验原理1.本实验在DEBUG状态下输入汇编源程序,并且用DEBUG命令进行调试,用单步跟踪的方法试验指令的功能;2.以下是给定的参考程序,并在实验时每条指令的“;”等号右边按要求填写指令的分析结果。

三、实验步骤1.开机后进入DOS系统2.用DEBUG的REGISTER命令检查所有寄存器内容,并作记录R[寄存器名]3.用DEBUG的ASSEMBLE命令输入汇编源程序A[内存地址]4.用DEBUG的UNASSEMBLE命令反汇编U[起始地址][终止地址]5.用DEBUG的TRACE命令单步跟踪程序T[起始地址][终止地址]6.用DEBUG的DUMP命令显示存贮器单元的内容四、参考程序及结果MOV AX,2000 ;AL=00MOV DS,AX ;DS=2000NOT AX ;AX=DFFFXOR AX,AX ;AX=0000DEC AX ;AX=FFFFINC AX ;AX=0000MOV BX,2030 ;BH=20MOV SI,BX ;SI=2030MOV [SI],BL ;[2030H]=30MOV WORD PTR[SI],10F ;[2030H]=0F [2030H]=01 MOV DI,SI ;DI=2030MOV [DI+50],BH ;[DI+50]=20MOV BH,[SI] ;BH=0FMOV BL,[DI+50] ;BL=20MOV SP,5000PUSH AX ;AX=0 [SS:4FFEH]=00H [SS:4FFFH]=00H PUSH BX ;BX=0F20 [SS:4FFCH]=20H [SS:4FFDH]=0FH POP AX ;AX=0F20POPF ;F=00000000NEG BX ;BX=F0E0XCHG BX,AX ;BX=0F20STD ;F=01010001STI ;F=01110001CLD ;F=00110001CLI ;F=00010001ADC DI,2050 ;DI=4081 F=00000010ADC SP,DI ;SP=9081 F=10010010ADC AX,1500 ;AX=05E0 F=00000001SUB AX,BX ;AX=F6C0 BX=0F20SHL AH,1 ;AH=ECRCL AX,1 ;AX=D981SHR BX,1 ;BH=07RCR BL,1 ;BL=90MOV CL,4MOV DX,80F0ROL DX,CL ;DX=0F08 CL=04INT 20 ;CS=00A7 IP=1072实验二数据的建立与传送程序一、实验目的1.学习DEBUG命令2.验证指令的功能二、实验原理在DEBUG状态下,输入程序,用G命令进行连续方式执行程序,用DUMP命令查看建立的数据块内容三、参考程序及结果1.在内存1000单元开始,建立00H~0FH~00H 31个数,要求00H~0FH数据逐渐增大,0FH~00H逐渐减小,程序从内存CS:0100H地址开始输入MOV AX ,100HMOV DS ,AXMOV SI,0MOV CL ,0FHXOR AX,AXPPE1: MOV [SI] ;ALINC SI ;INC ALDEC CLJNZ PPE1MOV CX,10HPPE2:MOV[SI],ALINC SIDEC ALLOOP PPE2INT 20H数据块的内容1000:0000:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:0100:0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 002.把上一程序的执行结果分几种方式传送到以下指定区域(a)该程序从内存CS:0150H开始输入,把数据块传送到15050H 开始的存储区域中MOV AX,1000HMOV DS,AXMOV SI,0MOV DI,5050HMOV CX,1FHPPEA: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP PPEAINT 20H结果:1000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(b)用串传送指令MOVSB,把数据块传送到15150H开始的区域,该程序从内存CS:0200H开始输入MOV AX,100HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5150HMOV CS,1FHCLDPPEB: MOVSBLOOP PPEBINT 20H结果:1000:5150 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5160 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(C)用重复串操作指令”REP MOVSB”把数据传送到15250H开始的区域,该程序从CS:250H地址开始输入MOV AX,1000HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5250HMOV CX,1FHCLDREPZMOVSBINT 20H结果:1000:5250 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5260 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(c)用串操作的减量工作方式,把数据传送到25050H开始的区域,该程序从CS:0300H开始输入MOV AX,1000HMOV DS,AXADD AX,AXMOV ES,AXMOV SI,1EHMOV DI,506EHMOV CX,1FHSTDREP MOVSBINT 20H结果:2000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 2000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00实验四统计学生成绩程序一、实验目的进一步掌握分支程序和循环程序的编写方法二、实验原理设有10个学生的成绩分别为56,69,84,82,73,88,99,63,100和80分。

汇编实验四分支和循环程序设计实验(设计性实验)

汇编实验四分支和循环程序设计实验(设计性实验)

汇编实验四分支和循环程序设计实验(设计性实验)汇编语言实验报告实验四分支和循环程序设计实验(设计性实验)班级:姓名:学号:实验日期:实验四分支和循环程序设计实验(设计性实验)一、实验要求和目的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).带符号数条件转移指令。

汇编语言_实验四_[bx]和loop的使用

汇编语言_实验四_[bx]和loop的使用
mov cx,0040h
s:mov [bx],bl add bx,1 loop s
mov ax,4c00h int 21h code ends end
(2)对源程序t2.asm进行汇编连接,并用debug进行调试,并用g命令查看0:200~0:23F,确认改程序的确将将0~63传送到了此段内存区 域:
3. 实验内容3 (1) 源代码: assume code code segment
mov ax,cs mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,cx s:mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends
alexanderyang理论上感觉这样似乎好像就可以解决问题了但实际上结合现实生活中实际应用场景仍需稍作处理
四、实验结论
汇编语言 _实验四 _[bx]和 loop的使用
1. 实验内容1 (1)源代码: assume cs:code code segment
mov ax,0b800h mov ds,ax mov bx,07b8h
(2) 对源程序进行调试:
检查后发现确实将 mov ax,4c00h前的指令复制到了内存。 五、总结与体会 喵喵喵喵喵
mov cx,16 s: mov [bx],0403h
add bx,2 loop s
mov ah,4ch int 21h code ends end
(2)修改后运行结果:
2. 实验内容2 (1)源代码: assume cs:code code segment
mov ax,0 mov ds,ax mov bx,0200h

汇编语言实验报告

汇编语言实验报告

汇编语⾔实验报告汇编语⾔实验报告专业:班级:姓名:学号:2011年12⽉14⽇⽬录实验1 利⽤DEBUG调试汇编语⾔程序段 (3)实验2 初级程序的编写与调试实验(⼀) (11)实验3 初级程序的编写与调试实验(⼆) (20)实验4 汇编语⾔程序上机过程 (28)实验5 分⽀程序实验 (33)实验6 循环程序实验 (40)实验7 ⼦程序实验 (45)实验1 利⽤DEBUG调试汇编语⾔程序段⼀.实验⽬的1.熟悉DEBUG有关命令的使⽤⽅法;2.利⽤DEBUG掌握有关指令的功能;3.利⽤DEBUG运⾏简单的程序段。

⼆.实验内容1.进⼊和退出DEBUG程序;1)开始—运⾏,输⼊cmd,点确定进⼊命令窗⼝2)在命令窗⼝中输⼊dubug进⼊debug程序3)进⼊debug窗⼝后,输⼊q命令退出debug2.学会DEBUG中的1)D命令(显⽰内存数据D 段地址:偏移地址)例1:-D100 ;显⽰DS段, 0100开始的128个节内容说明: 指定要显⽰其内容的内存区域的起始和结束地址,或起始地址和长度。

① D SEGREG[起始地址] [L 长度];显⽰SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容.② D SEGREG[段地址:偏移地址];显⽰SEGREG段中(缺省内默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省内默认为128)个字节内容-D ;默认段寄存器为DS,当前偏移地址(刚进⼊debug程序偏移地址为0100H)-D DS:100 ;显⽰DS段, 0100H开始的128个字节内容-D CS:200 ;显⽰CS段, 0200H开始的128个字节内容-D 200:100 ;显⽰DS段, 0200:0100H开始的128个字节内容-D 200 ;显⽰DS段, 0200H开始的128个字节内容-D 100 L 10 ;显⽰DS段, 100H开始的8H个字节内容2)E命令(修改指定内存)-E100 11 22 33 44 55 66 77 88-D 100结果:0AF1:0100 11 22 33 44 55 66 77 88例2:-E 100:E 地址数据表;从指定的地址开始⽤数据表给定的数据修改存储单元。

实验四(报告)汇编语言编程的软件实训(实验报告)

实验四(报告)汇编语言编程的软件实训(实验报告)

实验四汇编语言编程实验报告
专业:班级:学号:姓名:
一.实验目的
熟悉汇编语言的编辑(如、QE.EXE及记事本等),汇编(MASM.EXE),连接(LINK.EXE)以及调试(DEBUG.EXE)软件。

二.实验设备
硬件环境:IBM/PC及其兼容机
软件环境:操作系统DOS 2.0版本以上;
汇编语言的编辑程序(如EDIT、QE、Windows操作系统自带的记事本等)、
汇编程序程序MASM、连接程序LINK及调试程序DEBUG。

三.实验要求
1. 试按下列给定的公式编写程序:编写源程序,参照P232 x1,x2,x3,x4在16位二进制数的范围内,且有意义)
(3*X1-(X2*X3+7*X4-200))/X3
其中,X1, X2, X3, X4为16位带符号数的字变量。

计算结果的商存在AX中,余数存放在DX中。

2.用编辑软件生成扩展名为.ASM的源文件,如:TEST.ASM,ABC.ASM等;
3.用汇编程序MASM.EXE对已编辑的源文件进行汇编并生成扩展名为.OBJ的目标程序名,如:TEST.OBJ,ABC.OBJ等;
4.用连接程序LINK.EXE进行连接生成扩展名为.EXE的可执行文件,如:TEST.EXE,ABC.EXE等;
5.应用调试程序DEBUG.EXE的主要命令对所生成的可执行文件进行调试。

四.实验过程及结果:
1.汇编生成目标文件结果如下:
2.连接生成可执行程序结果如下:
3.调试结果FUN的值为:
四.课后设计题:1.源程序:
2.计算结果:。

汇编 实验报告

汇编 实验报告

汇编实验报告汇编实验报告引言:汇编语言是一种低级语言,用于编写计算机程序。

在计算机科学领域中,汇编语言是一门重要的学科,它可以帮助我们更深入地了解计算机的内部工作原理。

本实验报告将介绍我在学习汇编语言过程中的实验经历和所学到的知识。

实验一:汇编语言的基本概念在本实验中,我首先学习了汇编语言的基本概念。

汇编语言是一种用于编写机器指令的低级语言,它直接操作计算机的硬件。

通过学习汇编语言,我了解了计算机内存、寄存器、指令和数据的存储方式,并学会了如何编写简单的汇编程序。

实验二:汇编语言的数据表示在这个实验中,我学习了汇编语言中的数据表示方法。

汇编语言中的数据可以用不同的方式表示,例如二进制、十进制和十六进制。

我还学习了如何使用数据寄存器和内存寻址来处理不同类型的数据。

实验三:汇编语言的指令集在本实验中,我学习了汇编语言的指令集。

汇编语言中的指令可以分为数据传送指令、算术运算指令、逻辑运算指令和控制指令等多种类型。

通过学习不同类型的指令,我可以编写更加复杂和功能强大的汇编程序。

实验四:汇编语言的程序设计在这个实验中,我学习了如何使用汇编语言进行程序设计。

通过学习汇编语言的程序设计技巧,我可以编写出高效、精确和可靠的程序。

我还学习了如何使用子程序、循环和条件语句等控制结构来实现不同的功能。

实验五:汇编语言的调试和优化在本实验中,我学习了如何调试和优化汇编语言程序。

调试是指在程序运行过程中发现并修复错误的过程,而优化则是指对程序进行性能提升的过程。

通过学习调试和优化技巧,我可以提高程序的效率和可靠性。

结论:通过这些实验,我对汇编语言有了更深入的了解。

汇编语言虽然复杂,但它可以帮助我们更好地理解计算机的内部工作原理,并且可以编写出高效、精确和可靠的程序。

通过学习汇编语言,我不仅提升了自己的编程能力,还对计算机科学有了更全面的认识。

我相信,在今后的学习和工作中,汇编语言将会发挥重要的作用。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告实验一、汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。

若相同’,否则显示‘No match’。

则显示‘Match在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1’和‘Nomatch’。

再代码段比较字符串string1和string2,和mess2,分别代表‘Match通过比较判断是否相同。

若相同则显示‘Match’,否则显示‘No match’。

二、调试说明再EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。

再用Debug进行调试。

其中常用到的指令有:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存用器和修改寄存器的值,-q命令用来退出debug程序。

在这些命令的后面加上地址,可以将命令执行到相应的地方。

如用-g指令运行程序后,再用-u指令显示程序的执行借给如下:若将string2改为'Move the cursor backwards.',程序的其他部分不做改动,执行结果:若将mov cx,25语句改成mov cx,24,结果为:此时少做了一次循环,得到的结果就不正确了。

实验二、用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一、程序说明本实验包括两个部分,第一个部分是将AX和BX的内容进行交换,并用堆栈作为两寄存器交换内容的中间存储单元;第二部分是用DEBUG的命令将存储器偏移地AH, 0BH,0CH,0DH,0EH。

在DEBUG状态址300H,304H连续单元顺序装入0 下送入给出的程序中。

第一个程序先将AX的内容进栈,然后将BX的内容赋给AX,再将出栈的内容赋给BX即可。

第二个程序是在进入debug后,用-a指令输入给出的程序,然用-r指令安要求修改内存的内容,再用-t指令逐步执行每条指令,看修改的内存内容对指令执行结果的影响。

汇编实验报告,(例文)

汇编实验报告,(例文)

汇编实验报告,(例文)《汇编语言程序设计》实验报告2021年11月★★FGL实验一:汇编语言运行环境及方法、简单程序设计I:实验要求:1、绘制程序流程图2、结合你的调试过程,整理其中用到的debug命令的使用方法和效果截图,并解释每一步骤的结论3、调试中遇到的问题及解决方法 II:具体实验过程:a.程序流程图1、开始输入源程序根据实验步骤进行汇编比较string1与string2输出NO输出Match结束b.调试过程及debug命令使用方法·-u命令反汇编:·-g0b·-d0:查看数据段内容·-g:执行完程序显示结果根据数据段显示的数据内容可知,在;两字符串分别为"Movethecursorbackward."和"Movethecursordackward.",因而可根据debug命令中的-e将第二个字符串中的d修改为b则可使结果显示为MATCH!具体步骤如下:如下图所示,对内存中1436:0029的存储单元进行-e29命令修改的前后数据的显示,可看到已经将d修改为b,从而-g命令运行的结果是Match.(注:-a 和-f命令亦可修改数据区内容但使用时有一定的区别)·-q命令退出debug调试:·-t命令的单步调试:(该过程中IP不断变化着)实验二:用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等I:实验要求:1、任务1的指令序列2、整理本次试验中用到的debug命令的使用方法及效果截图II:实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。

3、掌握简单指令的执行过程。

III:实验内容:任务一、设堆栈指针SP=2021H,AX=3000H,BX=5000H;请编一程序段将AX 和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

汇编实验四

汇编实验四

成绩:计算机原理实验室实验报告课程:汇编语言与微机原理姓名:汪智专业:计算机科学与技术学号:112054141日期:2013年11月太原工业学院计算机工程系实验四:子程序及中断实验实验环境PC机+Win 2003+emu8086+proteus仿真器实验日期2013.11.18 一.实验内容(一)基本内容1.实现子程序和中断服务子程序的设计2.编写子程序设置40H中断为自定义中断服务子程序3.编写中断服务子程序实现AX=AX+BX4.编写主程序调用子程序和中断扩展内容(二)扩展要求保留原中断服务子程序功能(三)思考内容1.中断向量表结构2.中断服务程序链的实现二.理论分析或算法分析三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)code segmentassume cs:code, ds:codest:mov ax, codemov ds, axxor ax, axmov es, axmov di, 40H*4climov ax, es:[di]mov old, axmov ax, es:[di+2]mov old+2, axmov ax, offset newint40mov es:[di], axmov ax, seg newint40mov es:[di+2], axstimov ax, 1mov bx, 2lp1:int 40hjmp lp1newint40 proc faradd ax, bxmov num, axiretnewint40 endpold dw ?, ?num dw 0code endsend st四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)五.结论基本实现子程序和中断程序,从理论和操作上将其掌握。

本次实验实现子程序和中断服务子程序的设计,编写子程序设置40H中断为自定义中断服务子程序,编写中断服务子程序实现AX=AX+BX,编写主程序调用子程序和中断。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

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

实验4
实验学时: 2 实验地点:二综实验日期:2013-11-4
一、实验目的
掌握汇编编程规范,熟悉编程环境。

二、实验内容
编程计算3550H-2320H,按16进制输出计算所得的差1230H。

再输出3550H-2321H的差,检验程序的正确性。

提示:考虑依次将1230H(即0001 0010 0011 0000B)从高位到低位,每4位二进制数一组分离出来,再将4位二进制数转换为ASCII码,利用DOS系统功能调用的2号子功能输出,就得到16进制数据的输出效果。

本题要求综合应用移位操作、逻辑操作等指令,并利用条件转移指令实现简单的循环程序,程序流程如图1所示。

DOS系统功能调用的2号子功能格式见dos调用表。

图1 16进制数据输出程序流程图
三、实验步骤算法及关键代码
1、代码:
assume cs:code
code segment
start:
mov bx,3550h
sub bx,2320h
mov cx,4
s0: rol bx,1
rol bx,1
rol bx,1
rol bx,1
mov dl,bl
and dl,00001111b
add dl,30h
mov ah,02h
int 21h
loop s0
mov ax,4c00h
int 21h
code ends
end start
(2)截图:
四、实验小结(简单说明实验过程中出现的问题和解决方法)。

相关文档
最新文档