川师汇编实验报告
汇编语言实验报告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.实验目的和要求(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的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DA TABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATAS START:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START 1.算法描述及实验步骤1.(1)生成1.st文件(2)用EDIT查看文件2.修改后正确算法:DATA SEGMENTV AR1 DB 0, 25, 0DH, 30V AR2 DB 12H, 0A4H, 6BHV AR3 DB 'ABCDEF'V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA BEING: MOV AX, DATAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV byte ptr[SI], 0ABHMOV AL, V AR1+2MOV AX, [SI]MOV [BX], AXMOV AX, V AR4MOV V AR5+4, AXMOV AH, 4CHINT 21HCODE ENDSEND BEING5.调试过程1.程序没有错误,结果:2.程序运行出现错误:问题及改正:(1). 2.asm(2): error A2009: Symbol not defined: ODH 表示没有定义ODH;出错语句VAR1 DB 0, 25, ODH, 300,这里的 ODH应该为 16进制数的0DH。
汇编实验报告

《汇编实验报告》摘要:DX,NUM1,AX,NUM1,AH,2实验三算术运算与代码转换程序设计一、实验目的1)掌握算术运算程序的设计方法。
2)掌握代码转换程序的设计方法。
3)进一步掌握各种程序结构。
4)熟练掌握和使用用 DEBUG 调试程序。
二、实验内容1 1 )编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。
2)编制程序实现二进制定点数与十进制数的 ASCII 码串之间转换,并将结果显示在屏幕上。
3)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。
4)写程序把从键盘输入的四位十六进制数转换为压缩的 BCD 码,并显示输出。
5)编写一通用过程用来将十进制数(从键盘输入)转换为 P(从键盘输入)进制数。
三、实验设备PC 机一台四、实验步骤1) 按程序流程图编制实验程序。
2) 输入源程序。
3) 汇编、连接程序,执行程序,检查结果。
4) 程序的执行可用 DEBUG 的 G 命令,也可用 T 命令单步跟踪执行。
5) 用 D 命令检查执行结果。
六、源程序实验一 DATA SEGMENT NUM1 DB 22H,33H,44H,55H,66H,77H NUM1L DB 6HNUM2 DB 22H,22H,22H,22HNUM2L DB 4HOUTCOME1 DB 10H DUP(0) OUTCOME2 DB 10H DUP(0)N DB 0HDATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATAMOV DS,AXMOV CH,0MOV SI,OFFSET NUM1MOV DI,OFFSET NUM2MOV AH,NUM1LMOV AL,NUM2LCMP AH,ALJAE CHAXCHG SI,DIXCHG AH,ALCHA:SUB AH,ALMOV CL,ALCLCMOV BX,OFFSET OUTCOME1 LOP1:MOV AL,[DI] PUSH CXMOV CL,[SI]ADC CL,ALMOV [BX],CLINC BXINC SIINC DIPOP CXLOOP LOP1MOV CL,AHJCXZ LOP3LOP2:PUSH CXMOV CL, BYTE PTR [SI] ADC CL,0MOV [BX],CLPOP CXINC BXINC SILOOP LOP2LOP3:MOV CH,0MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2 MOV AH,NUM1LMOV AL,NUM2LCMP AH,ALJAE CHA1XCHG SI,DIXCHG AH,ALCHA1:SUB AH,ALMOV CL,ALCLCMOV BX,OFFSET OUTCOME2 LOP11:MOV AL,[DI]PUSH CXMOV CL,[SI]SBB CL,ALMOV [BX],CLINC BXINC SIINC DIPOP CXLOOP LOP11MOV CL,AH JCXZ LOP7LOP21:PUSH CXMOV CL, BYTE PTR [SI]SBB CL,0MOV [BX],CLPOP CXINC BXINC SILOOP LOP21LOP7:MOV DI,OFFSET OUTCOME1 ADD DI,10HMOV CX,11HLOP4: MOV DL,[DI] DEC DICMP N,0HJNE LOP5CMP DL,0HJE LOP9LOP5:PUSH DX PUSH CXMOV CL,4HSHR DL,CLPOP CXCMP DL,9HJBE LOP6ADD DL,7HLOP6:ADD DL,30H MOV AH,2INT 21HMOV N,1HPOP DXAND DX,0FH CMP DL,9HADD DL,7HLOP8:ADD DL,30HMOV AH,2INT 21HMOV DL,"H"MOV AH,2INT 21HLOP9:LOOP LOP4MOV N,0MOV DI,OFFSET OUTCOME2 ADD DI,10H MOV CX,11HLOP14: MOV DL,[DI]DEC DICMP N,0HJNE LOP15CMP DL,0HJE LOP19LOP15:PUSH DXPUSH CXMOV CL,4HPOP CXCMP DL,9HJBE LOP16ADD DL,7HLOP16:ADD DL,30H MOV AH,2INT 21HMOV N,1HPOP DXAND DX,0FHCMP DL,9HJBE LOP18ADD DL,7HLOP18:ADD DL,30H MOV AH,2INT 21HMOV DL,"H"MOV AH,2INT 21HLOP19:LOOP LOP14MOV AH,4CHINT 21HCODE ENDSEND START验实验 2DATA SEGMENTTISHI1 DB "Please enter the first number:","$" TISHI2 DB "Please enter the second number:","$" JIA DB "+","$"JIAN DB "-","$"CHENG DB "*","$" CHU DB "/","$"DENG DB "=","$"YU DB "......","$"A DB 10B DW 10C DW 10000F DW 0HNUM1 DW 0HNUM2 DW 0HN DB 0HN1 DB 4HDATA ENDSSTACK1 SEGMENT STACK DW 30H DUP(0)STACK1 ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATA START:MOV AX,DATA MOV DS,AXMOV DX,OFFSET TISHI1 MOV AH,09HINT 21HLOOP2:MOV AX,NUM1 MUL BMOV BX,AXMOV AH,1INT 21HCMP AL,0DHJE LOP1MOV NUM1,BXMOV AH,0SUB AL,30HADD NUM1,AXJMP LOOP2LOP1:MOV DL,0AH输出换行和回车MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21H MOV DX,OFFSET TISHI2 MOV AH,09HINT 21HLOOP1:MOV AX,NUM2 MUL B MOV BX,AXMOV AH,1INT 21HCMP AL,0DHJE LOP3MOV NUM2,BXMOV AH,0SUB AL,30HADD NUM2,AXJMP LOOP1LOP3:MOV DL,0AH 输出换行和回车MOV AH,2INT 21HMOV DL,0DH MOV AH,2INT 21HMOV N,0MOV DX,NUM1 MOV F,DXLOP6:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP7MOV F,AXJMP LOP6LOP7:MOV CL,NLOP16:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOP16MOV DX,NUM2 MOV F,DXMOV N,0MOV DX,OFFSET JIA MOV AH,09HINT 21HLOOOP6:MOV DX,0H MOV AX,F DIV B PUSH DXINC NCMP AX,0HJE LOOOP7MOV F,AXJMP LOOOP6 LOOOP7:MOV CL,NLOOOP16:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOOP16 MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0LOOP3:MOV AX,NUM1 ADD AX,NUM2MOV F,AXLOOP4:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP5MOV F,AXLOOP5:MOV CL,NMOV CH,0LOOP0:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP0MOV DL,0AH输出换行和回车MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV N,0 MOV DX,NUM1 MOV F,DXLOP61:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP71MOV F,AXJMP LOP61LOP71:MOV CL,N MOV CH,0LOP161:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOP161MOV DX,NUM2 MOV F,DXMOV N,0MOV DX,OFFSET JIAN MOV AH,09HINT 21HLOOOP61:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP71MOV F,AXJMP LOOOP61 LOOOP71:MOV CL,N MOV CH,0LOOOP161:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOOP161 MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0 MOV N,0 MOV AX,NUM1SUB AX,NUM2MOV F,AXAND AX,10000000BCMP AX,10000000B JNE LOOP6NEG FLOOP6:MOV DX,0 MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP7MOV F,AXJMP LOOP6 LOOP7:MOV CL,N MOV CH,0LOOP16:POP DX ADD DX,30H MOV AH,2INT 21HLOOP LOOP16 MOV DL,0AH输出换行和回车INT 21HMOV DL,0DHMOV AH,2INT 21HMOV N,0MOV DX,NUM1MOV F,DXLOP62:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP72MOV F,AXJMP LOP62LOP72:MOV CL,NMOV CH,0 LOP162:POP DX ADD DX,30HMOV AH,2LOOP LOP162MOV DX,NUM2MOV F,DXMOV N,0MOV DX,OFFSET CHENG MOV AH,09HINT 21HLOOOP62:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP72MOV F,AXJMP LOOOP62 LOOOP72:MOV CL,N MOV CH,0LOOOP162:POP DX ADD DX,30HINT 21HLOOP LOOOP162 MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0MOV AX,NUM1MUL NUM2DIV CPUSH DXMOV F,AXMOV N,0LOOP8:MOV DX,0 MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP9MOV F,AXLOOP9:MOV CL,N MOV CH,0LOOP17:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOP17 MOV N,0POP FLOOP10:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP11MOV F,AXJMP LOOP10 LOOP11:MOV AL,N CMP AL,4HMOV AL,4HSUB AL,NMOV CL,ALMOV CH,0LOOP19:MOV DX,"0" MOV AH,2INT 21HLOOP LOOP19 LOOP20:MOV CL,N MOV CH,0LOOP18:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOP18 MOV DL,0AH输出换行和回车MOV AH,2INT 21HMOV DL,0DHINT 21H MOV N,0 MOV DX,NUM1 MOV F,DXLOP64:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP74MOV F,AXJMP LOP64LOP74:MOV CL,N MOV CH,0LOP164:POP DX ADD DX,30H MOV AH,2INT 21HLOOP LOP164 MOV DX,NUM2MOV N,0MOV DX,OFFSET chu MOV AH,09HINT 21HLOOOP64:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP74MOV F,AXJMP LOOOP64 LOOOP74:MOV CL,N MOV CH,0LOOOP164:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOOP164MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0 MOV AX,NUM1 MOV DX,0DIV NUM2PUSH DXMOV F,AXMOV N,0LOOP15:MOV DX,0 MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP12MOV F,AXJMP LOOP15LOOP12:MOV CL,N MOV CH,0LOOP21:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP21 MOV DX,OFFSET YU MOV AH,09HINT 21HPOP FMOV N,0LOOP13:MOV DX,0 MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP14MOV F,AXJMP LOOP13 LOOP14:MOV CL,N MOV CH,0H LOOP22:POP DXADD DX,30H MOV AH,2INT 21HLOOP LOOP22MOV AH,4CHINT 21HCODES ENDSEND START实验五输入输出程序设计一、实验目的1) 掌握输入输出程序的编写方法。
师大汇编实验报告含程序参考模板

湖南师范大学汇编实验报告姓名:年级:专业:计算机科学与技术学号:任课教师:陈兆仁开课时间:2012~2013学年第一学期实验一DOS常用命令及8086指令使用实验目的:通过实验掌握下列知识:1、DOS命令: DIR,DEL,RENAME,FORMAT,COPY。
2、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG3、DEBUG命令: A,D,E,F,H,R,T,U。
4、BCD码,ASCII码及用16进制数表示二进制码的方法。
5、8086寄存器: AX,BX,CX,DX,F,IP。
内容及步骤:一、DOS常用命令练习:1、将新盘插到 A驱动器中,用DIR命令查看盘上文件。
2、用命令 COPY BUG 复制一个文件。
3、用命令 RENAME BUG BG 将BUG 文件改为BG。
4、用命令 DEL BG 将文件BG删除。
在操作时要注意提示信息,并按提示操作。
二、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示苻 '_ '。
2、用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII 字符。
4、用命令 F 110 11F 41 重复上二项实验,观察结果并比较。
5、用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H(5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF8、用R命令将AX,BX内容改写为1050H及23A8H。
汇编实验实验一

《汇编》实验报告一、实验内容1、试编制一程序,计算下列公式的值,并存放在FUN存储单元中。
F=[10*(x+y)-3*(z-1)]/22、试编制一程序,从键盘输入一字符串,并将该字符串从屏幕上显示出来。
例如:显示’hello computer!’二、实验目的及要求1、实验目的:1.了解熟悉DEBUG命令;2.熟悉数据传送指令、算术运算指令、逻辑指令、段寄存器装在的内容;3.掌握简单的汇编语言程序编写与调试。
2、实验要求:1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;2.阅读数据传送指令、算术运算指令、逻辑指令、段寄存器装在的内容;3.用DEBUG的有关命令调试本实验中的求多项式结果程序段与从键盘输入一字符串并将该字符串从屏幕上显示出来的程序段。
三、设计分析第一题的设计分析:一、实现变量的三个步骤:①、在数据段中定义变量并赋予初值,为计算多项式做准备;②、利用算术指令ADD、SAL、SUB、INC、DEC、SAR实现多项式的运算。
二、计算变量与计算变量结果的存放:①、代码段第三条指令开始计算变量,倒数第三条指令存放变量的结果,即多项式的计算终止;②、变量的奇数倍用ADD与SAL指令完成,而偶数倍只需SAL指令完成;③、注意MOV指令的操作数不能同时为存储单元。
第二题的设计分析:一、实现字符串输入,需要分成三个步骤:①、在数据段中定义一个缓存区为存放字符串做准备;②、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址;③、在输入的字符串尾加上‘$’字符,以作为输出结束条件。
二、实现字符串输出,则需要注意的问题是:①、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;②、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。
四、程序的调试过程第一题:第二题:五、运行结果分析第一题的运行结果分析:第二题的运行结果分析:六、附件:带注释的源程序第一题的源代码:TITLE EXAMPLE PROGRAMDATA SEGMENTVARX DW 123H ;定义X变量VARY DW 456H ;定义Y变量VARZ DW 789H ;定义Z变量FUN DW ? ;定义存放结果的存储单元DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV AX,VARX ;取变量XADD AX,VARY ;计算(X+Y)MOV BX,AXSAL AX,1 ;计算2*(X+Y)SAL AX,1 ;计算4*(X+Y)ADD AX,BX ;计算5*(X+Y)SAL AX,1 ;计算10*(X+Y)MOV BX,VARZ ;取变量ZDEC BX ;计算(Z-1)MOV CX,BXSAL BX,1 ;计算2*(Z-1)ADD BX,CX ;计算3*(Z-1)SUB AX,BX ;计算10*(X+Y)-3*(Z-1) SAR AX,1 ;计算[10*(X+Y)-3*(Z-1)]/2 MOV FUN,AX ;存放结果MOV AH,4CH ;终止用户程序,返回DOS INT 21HCODE ENDSEND START第二题的源代码:DATA SEGMENTN EQU 50MAXLEN DB N ;缓冲区字符的最大长度ACTLEN DB ? ;实际字符个数STRING DB N DUP(?) ;字符空间CR DB 0AH,0DH,'$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 200H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入MOV AH,09H ;字符串输出LEA DX,CR ;回车换行INT 21HMOV BL,MAXLEN+1 ;取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上$ MOV DX,SI ;把开始存放字符的首地址赋给DX MOV AH,09H ;字符串输出INT 21HMOV AH,4CH ;终止用户程序,返回DOSINT 21HCODE ENDSEND START。
汇编语言实验十实验报告

汇编语言实验十实验报告一、实验目的本次实验的主要目的是通过学习汇编语言中的输入输出指令和字符串操作指令,掌握如何在汇编语言中进行简单的输入输出和字符串操作。
二、实验内容本次实验主要包括以下内容:1. 输入输出指令:学习如何使用INT 21h中断来进行简单的键盘输入和屏幕输出操作。
2. 字符串操作指令:学习如何使用MOV、LEA、LDS等指令来进行字符串的存储、传递和比较等操作。
3. 实现一个简单程序:通过上述知识点,完成一个简单的程序,可以进行键盘输入和屏幕输出,并对两个字符串进行比较。
三、实验过程1. 输入输出指令在汇编语言中,我们可以使用INT 21h中断来进行键盘输入和屏幕输出操作。
其中,AH寄存器用于指定不同的功能号码。
例如:- AH=01h:在屏幕上显示一个字符- AH=02h:在屏幕上显示一个ASCII码值所代表的字符- AH=06h:从键盘读取一个字符下面是一个示例程序,可以让用户从键盘上输入一个字符,并将其显示在屏幕上:```mov ah, 06h ; 将06h存入AH寄存器int 21h ; 调用中断21hmov dl, al ; 将读取的字符存入dl寄存器mov ah, 02h ; 将02h存入AH寄存器int 21h ; 调用中断21h,显示字符```2. 字符串操作指令在汇编语言中,我们可以使用MOV、LEA、LDS等指令来进行字符串的存储、传递和比较等操作。
例如:- MOV:可以将一个字符串从一个内存地址复制到另一个内存地址- LEA:可以将一个字符串的地址加载到寄存器中- LDS:可以将一个段地址和偏移地址加载到DS和SI寄存器中下面是一个示例程序,可以将一个字符串从一个内存地址复制到另一个内存地址,并比较两个字符串是否相等:```mov si, offset str1 ; 将str1的偏移地址加载到SI寄存器中lea di, str2 ; 将str2的地址加载到DI寄存器中mov cx, length ; 将字符串长度加载到CX寄存器中copy_loop:lodsb ; 从SI指向的内存单元读取一字节数据,并自动将SI加1 stosb ; 将AL所包含的数据写入DI指向的内存单元,并自动将DI 加1loop copy_loop ; 循环执行,直至CX为0cmp str1, str2 ; 比较str1和str2是否相等je equal ; 如果相等,跳转到equal标签not_equal:; 如果不相等,执行一些操作jmp endequal:; 如果相等,执行一些操作end:```三、实验结果通过本次实验,我学会了如何在汇编语言中进行简单的输入输出和字符串操作。
汇编实验一实验报告

汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一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 寄存器的内容变化,尤其是标志位的变化。
汇编实验报告

汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。
通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,汇编语言编译器为MASM 615。
三、实验内容(一)数据传送与算术运算1、编写程序实现将两个 16 位的整数相加,并将结果存储在指定的内存单元中。
2、实现数据在不同寄存器和内存单元之间的传送。
(二)逻辑运算与移位操作1、对给定的两个字节数据进行逻辑与、或、异或操作,并观察结果。
2、进行移位操作,包括左移和右移,理解移位对数据的影响。
(三)循环与分支结构1、利用循环结构计算 1 到 100 的整数之和。
2、根据给定的条件,使用分支结构实现不同的操作。
(四)子程序调用1、编写一个子程序,实现两个数的乘法运算。
2、在主程序中调用该子程序,并输出结果。
四、实验步骤(一)数据传送与算术运算1、打开 MASM 编译器,新建一个汇编源文件。
2、使用`MOV` 指令进行数据传送,将两个整数分别存储在寄存器`AX` 和`BX` 中。
3、使用`ADD` 指令将两个数相加,结果存储在`CX` 寄存器中。
4、最后,使用`MOV` 指令将结果存储到指定的内存单元。
(二)逻辑运算与移位操作1、在源文件中定义两个字节变量,并初始化其值。
2、使用逻辑运算指令(如`AND`、`OR`、`XOR`)对这两个变量进行操作。
3、使用移位指令(如`SHL`、`SHR`)对变量进行移位,并观察结果。
(三)循环与分支结构1、对于循环结构,使用`LOOP` 指令实现从 1 到 100 的累加。
2、在分支结构中,根据给定的条件(如比较两个数的大小),使用`JZ`、`JL` 等指令执行不同的分支操作。
(四)子程序调用1、定义一个子程序,使用参数传递的方式接收两个数,并进行乘法运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验编号: 2 四川师大《汇编语言》实验报告2016 年 9月 21 日
计算机科学学院 2015 级3班实验名称寻址方式实验
姓名:邓小卫学号:2015110309 指导老师:__吴贞东__ 实验成绩:
一.实验目的及要求
熟悉8086各种寻址方式
熟悉DEBUG各命令的使用方法
二.实验内容
3.2根据要求写出相应的汇编语言指令
1.把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器
2.用寄存器BX和SI的基执变址寻址方式把寄存器中的一个字节与AL寄存器的内容相
加,并把结果送到AL寄存器中。
3.用寄存器BX和位移量0B2H寄存器相对寻址方式把寄存器中的一个字和(CX)相加,
并把结果送回寄存器、
4.用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送
回该存储单元中。
5.把数0B5H与(AL)相加,并把结果送回AL中。
3.3 写出把首地址为BLOCK的字数组的第6个送到DX寄存器的指令。
要求使用以下几种寻址方式:
1.寄存器间接寻址
2.寄存器相对寻址
3.基址变址寻址
3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H ,(20102)=56H,(20103)=78H,(21200)=2AH,(21203)=4CH,(21202)=B7H,(212030)=65H,试着说明下列各条指令执行完后AX寄存器的内容。
1.MOV AX,1200H
2.MOV AX,BX
3.MOV AX,[1200H]
4.MOV AX[BX]
5.MOV AX,1100[BX]
6.MOV AX,[BX][SI]
7.MOV AX,1100[BX][SI]
三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)3.2根据要求写出相应的汇编语言指令
1.把BX寄存器和DX寄存器的内容相加,结果存入DX
MOV DX,5
MOV BX,5
ADD DX,BX
2.用寄存器BX和SI的基执变址寻址方式把寄存器中的一个字节与AL寄存器的内容相
加,并把结果送到AL寄存器中。
MOV AL,5
ADD AL,[BX][SI]
3.用寄存器BX和位移量0B2H寄存器相对寻址方式把寄存器中的一个字和(CX)相加,
并把结果送回寄存器、
MOV CX,5
ADD 0524[BX],CX
4.用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送
回该存储单元中。
MOV AX,[0524]
ADD AX,2A59
5.把数0B5H与(AL)相加,并把结果送回AL中。
ADD AL,[0B5]
3.3 写出把首地址为BLOCK的字数组的第6个送到DX寄存器的指令。
要求使用以下几种寻址方式:
1.寄存器间接寻址
2.寄存器相对寻址
3.基址变址寻址
寄存器间接寻址
MOV AX,OFFSET[BLOCK][0AH]
MOV DX,[AX]
寄存器相对寻址
MOV SI,OAH
MOV DX,[BLOCK][SI]
基址变址寻址
MOV BX,BLOCK
MOV SI,OAH
MOV DX,[BX][SI]
3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H ,(20102)=56H,(20103)=78H,(21200)=2AH,(21203)=4CH,(21202)=B7H,(212030)=65H,试着说明下列各条指令执行完后AX寄存器的内容。
1.MOV AX,1200H
1200H
2.MOV AX,BX
0100H
3.MOV AX,[1200H]
0000
4.MOV AX,[BX] 0000
5.MOV AX,1100[BX] 0000
6.MOV AX,[BX][SI] B812H’
7.MOV AX,1100[BX][SI]
0000
四.实验结果的分析与评价(该部分如不够填写,请另加附页)
练习的越多,体会的便越多。
之前在做实验一时,并不知道那些指令熟悉了拿来干嘛,而这次实验便恰好使用上个实验上用到的指令。
而且,对于指令自己有独特的看法,比如3.2题中,如果不对寄存器内赋初值,实验是看不变化的,因而采用了MOV进行寻址修改,但是除了这个,还可以使用R指令直接修改。
另外,在做这些实验之前,我参考了网上的答案,发现有和网上的答案不同,不知道是不是计算机的原因。
注:实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。