汇编语言上机实验指导
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言上机实验指导
实验一汇编语言基本指令操作练习
一、实验目的:
1、掌握8086/8088基本指令的使用方法和功能。
2、初步了解汇编语言程序设计的基本结构和利用DEBUG调试
程序的方法。
3、进一步熟悉汇编语言的上机过程。
二、上机实验指导:
(一)利用DEBUG的A命令输入指令,做如下实验。
1、比较下面指令的区别:
①MOVAX,2000H②MOVBX,[2000H]
-D2*******;显示字存储单元DS:2000的内容
3ADC:20005A58ZX
-R;显示指令执行前AX,BX的内容
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=3ADCES=3ADCSS=3ADCCS=3ADCIP=0100NVUPEIPLNZNAPONC
3ADC:0100858CFFF3TESTCX,[SI+F3FF]DS:F3FF=74C0
-A;利用A命令输入汇编指令
3ADC:0100MOVAX,2000
3ADC:0103MOVBX,[2000]
3ADC:0107INT3;此中断为断点中断,使程序执行暂停
3ADC:0108
-G;不指定地址,从当前CS:IP处执行
AX=2000BX=585ACX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000 DS=3ADCES=3ADCSS=3ADCCS=3ADCIP=0107NVUPEIPLNZNAPONC
3ADC:0107CCINT3;指令执行后,AX=2000H,BX=585AH
2、以寄存器BX作为地址指针,从BX所指的存储单元开始起,连续存放着
两个无符号数(字操作数),编程求它们的和,并将结果存放在这两个数
之后。
-RBX;显示BX寄存器中的内容(BX=0000h)
BX0000
:;回车
-D0*******;显示DS:0000到DS:0005的内容(BX所指的三个
字操作数),如BX不为0000H,自己修改范围。
3A6B:0000CD20FF9F009A..... ;三个字操作数依次为20CDH,9FFFH,9A00H
-A;输入指令
3A6B:0100MOVAX,[BX]
3A6B:0102INCBX
3A6B:0103INCBX
3A6B:0104ADDAX,[BX]
3A6B:0106INCBX
3A6B:0107INCBX
3A6B:0108MOV[BX],AX
3A6B:010AINT3
3A6B:010B
-G;运行此程序
AX=C0CCBX=0004CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000 DS=3A6BES=3A6BSS=3A6BCS=3A6BIP=010ANVUPEIPLNZNAPONC
3A6B:010ACCINT3
-D0*******;观察运行结果,检查第三个字操作数是否为前两个
字操作数之和
3A6B:0000CD20FF9FCCC0.....
3、在屏幕上显示大写字符”A”。
-A
1277:0100movah,2
1277:0102movdl,41;大写字符”A”的ASCII值为41H
1277:0104int21
1277:0106int3
1277:0107
-G
A;显示大写字符”A”
AX=0241BX=0000CX=0000DX=0041SP=FFEEBP=0000SI=0000DI=0000 DS=1277ES=1277SS=1277CS=1277IP=0106NVUPEIPLNZNAPONC 1277:0106CCINT3
三、实验步骤
1、按照上机实验指导的内容,练习三个程序的运行和调试。
2、用DEBUG的A命令输入指令,完成以下功能:
已知(AL)=50H,(BL)=18H,计算AL-BL,并将存入CL中。
输入指令后,运行调试,观察运行结果。
-a
1277:0100moval,50
1277:0102movbl,18
1277:0104subal,bl
1277:0106movcl,al
1277:0108int3
1277:0109
-g;观察寄存器AX,BX,CX的内容
AX=0038BX=0018CX=0038DX=0000SP=FFEEBP=0000SI=0000DI=0000 DS=1277ES=1277SS=1277CS=1277IP=0108NVUPEIPLNZACPONC 1277:0108CCINT3
3、用DEBUG的A命令输入指令,完成以下功能:
输入一个大写字母,将其转换为小写字母后输出。
编好程序后,用DEBUG调试、运行程序。
-a
1277:0100movah,1
1277:0102int21
1277:0104addal,20
1277:0106movdl,al
1277:0108movah,2
1277:010Aint21
1277:010Cint3
1277:010D
-g
Aa;输入一大写字母转换为小写字母后输出
AX=022ABX=0000CX=0000DX=002ASP=FFEEBP=0000SI=0000DI=0000 DS=1277ES=1277SS=1277CS=1277IP=010CNVUPEIPLNZNAPONC 1277:010CCCINT3
四、实验报告
1、用DEBUG调试程序时,如何设置断点?
2、写出实验内容二的程序段。
3、写出实验内容三的源程序。
实验二顺序结构程序设计
一、实验目的:
1、掌握顺序结构程序设计的基本方法。
2、熟悉汇编语言程序设计的基本结构和常用指令的使用。
3、进一步熟悉汇编语言的上机过程和DEBUG的使用。
二、上机实验指导:
(一)编写一个程序,在屏幕上输出一个大写字母”A”。
1、编写源程序,存为lx1.asm.
codesegment
assumecs:code
main:
movah,2
movdl,‟A‟
int21h
movah,4ch
int21h
codeends
endmain
2、汇编
masmlx1;
3、连接
linklx1;
4、运行
lx1
(二)编写程序完成如下功能:
已知字节变量X,Y存放于VARX,VARY存储单元中,利用公式求Z的值,
并将结果存放于RESULT存储单元中。
公式:Z=((X+Y)*8-X)/2
参考程序如下:(程序名:lx2.asm)
datasegment
varxdb06h
varydb07h
resultdb?
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
movdl,varx;DL<-X
adddl,vary;DL<-X+Y
movcl,3
saldl,cl;DL<-(X+Y)*8
subdl,varx;DL<-(X+Y)*8-X
sardl,1;DL<-((X+Y)*8-X)/2
movresult,dl
movah,4ch
int21h;退出程序
codeends
endstart
C:\MASM\DEBUGLX2.EXE
-U;反汇编
0F7A:0000B8790FMOVAX,0F79
0F7A:00038ED8MOVDS,AX
0F7A:00058A160000MOVDL,[0000]
0F7A:000902160100ADDDL,[0001]
0F7A:000DB103MOVCL,03
0F7A:000FD2E2SHLDL,CL
0F7A:00112A160000SUBDL,[0000]
0F7A:0015D0FASARDL,1
0F7A:001788160200MOV[0002],DL
0F7A:001BB44CMOVAH,4C
0F7A:001DCD21INT21;源程序结束
-G=01B;运行到断点CS:001B
AX=0F79BX=0000CX=0003DX=0031SP=0000BP=0000SI=0000DI=0000 DS=0F79ES=0F69SS=0F79CS=0F7AIP=001BNVUPEIPLNZACPONC
0F7A:001BB44CMOVAH,4C
-D0*******;数据段三个字节内容分别为X,Y,Z
0F79:0000060731..1
三、实验步骤
1、上机调试、运行实验指导中的参考程序。
2、编写程序完成如下功能:
用十进制输出一个按键的ASCII码值。
(教材43页例3.11)
3、编写程序完成如下功能:
输入两个一位数,输出它们的积。
(教材44页例3.12)
四、实验报告
1、写出实验内容二的源程序。
2、写出实验内容三的源程序。
实验三分支结构程序设计
一、实验目的:
1、掌握分支结构程序设计的基本方法。
2、掌握无条件转移指令和条件转移指令的使用。
3、掌握分支结构程序设计的两种基本结构的使用。
二、上机实验指导:
(一)编写程序,将BX与DX中较大的一个无符号数放到AX中。
(程序文件名lx61.asm)
codesegment
assumecs:code
start:
movbx,1000;十进制数
movdx,785h;十六进制数
cmpbx,dx
jalab3;如BX>DX
movax,dx
jmplab4
lab3:movax,bx
lab4:movah,4ch
int21h
codeends
endstart
C:\MASM\DEBUGLX61.EXE
-u
35D1:0000BBE803MOVBX,03E8
35D1:0003BA8507MOVDX,0785
35D1:00063BDACMPBX,DX
35D1:00087705JA000F
35D1:000A8BC2MOVAX,DX
35D1:000CEB03JMP0011
35D1:000E90NOP
35D1:000F8BC3MOVAX,BX
35D1:0011B44CMOVAH,4C
35D1:0013CD21INT21
35D1:0015FF34PUSH[SI]
35D1:001726ES:
35D1:00188A4402MOVAL,[SI+02]
35D1:001B2AE4SUBAH,AH
35D1:001D50PUSHAX
35D1:001EE80B02CALL022C
-g=011
;观察寄存器AX、BX、DX的值
AX=0785BX=03E8CX=0015DX=0785SP=0000BP=0000SI=0000DI=0000 DS=35C1ES=35C1SS=35D1CS=35D1IP=0011NVUPEINGNZNAPECY
35D1:0011B44CMOVAH,4C
(二)
1(x>0)
已知符号函数Y=1(x=0),给出X值在存储器XX单元,
-1(x<0)
根据符号函数求出Y值存放于YY单元。
(程序名:EX62.ASM)datasegment
xxdb12h
yydb?
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
cmpxx,0
jezero;如XX为0,则转到zero
jnsbig;否则如XX大于0,转到big
movbl,0ffh;否则,XX小于0
jmpend1
zero:
movbl,0
jmpend1
big:
movbl,1
end1:
movyy,bl
movah,4ch
int21h
codeends
endstart
C:\MASM\DEBUGEX6.EXE
-U;反汇编
36E8:0000B8E736MOVAX,36E7
36E8:00038ED8MOVDS,AX
36E8:0005803E000000CMPBYTEPTR[0000],00
36E8:000A7407JZ0013
36E8:000C790AJNS0018
36E8:000EB3FFMOVBL,FF
36E8:0010EB08JMP001A
36E8:001290NOP
36E8:0013B300MOVBL,00
36E8:0015EB03JMP001A
36E8:001790NOP
36E8:0018B301MOVBL,01
36E8:001A881E0100MOV[0001],BL
36E8:001EB44CMOVAH,4C
-G=01E;运行到断点001E
AX=36E7BX=0001CX=0032DX=0000SP=0000BP=0000SI=0000DI=0000 DS=36E7ES=36D7SS=36E7CS=36E8IP=001ENVUPEIPLNZNAPENC
36E8:001EB44CMOVAH,4C
-D0*******;观察运行结果(X为12H时,Y为01H)
36E7:00001201..
-E0000F0;将X修改为F0H(DS:0000)
-G=01E;再次运行程序
AX=36E7BX=00FFCX=0032DX=0000SP=0000BP=0000SI=0000DI=0000 DS=36E7ES=36D7SS=36E7CS=36E8IP=001ENVUPEINGNZNAPENC
36E8:001EB44CMOVAH,4C
-D0*******;观察运行结果(X为F0H时,Y为0FFH)
36E7:0000F0FF..
-E00000;将X修改为00H
-G=01E;再次运行程序
AX=36E7BX=0000CX=0032DX=0000SP=0000BP=0000SI=0000DI=0000 DS=36E7ES=36D7SS=36E7CS=36E8IP=001ENVUPEIPLZRNAPENC
36E8:001EB44CMOVAH,4C
-D0*******;观察运行结果(X为00H时,Y为00H)
36E7:00000000..
三、实验步骤
1、上机调试、运行实验指导中的参考程序。
2、编写程序完成如下功能:
输入两个一位数,输出它们的积。
(教材63页例4.9)
3、编写程序完成如下功能:
从键盘接收一个按键,如果按键是小写字母则输出“L”,如果按键是大写字母则输出“U”,如果按键是数字则输出“N”,如果不是以上字符,则输出“*”。
(教材65页例4.10)
四、实验报告
1、写出实验内容二的源程序。
2、写出实验内容三的源程序。
实验四循环结构程序设计
一、实验目的:
1、掌握循环结构程序设计的基本方法。
2、掌握循环程序中重复控制指令的使用。
3、掌握循环结构程序设计的组成部分和基本结构形式。
二、上机实验指导:
在数据段中有如下数据区,统计该数据区中正数,0,负数的个数。
VARDB2,-3,0,5,-7,0,0,8,6,-9
参考程序如下:(程序名:EX71.ASM)
datasegment
vardb2,-3,0,5,-7,0,0,8,6,-9
xxdb?;存正数个数
yydb?;存负数个数
zzdb?;存零个数
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
movah,0;AH存正数个数
moval,0;AL存负数个数
movbh,0;BH存零个数
movsi,offsetvar
movcx,xx-var;CX数据个数
go:cmpbyteptr[si],0
jzzero
jnsplus
incal
jmpnext
zero:incbh
jmpnext
plus:incah
next:incsi
loopgo
movxx,ah;将个数存入存储单元
movyy,al
movzz,bh
movah,4ch
int21h
codeends
endstart
C:\MASM\DEBUGEX71.EXE
-U;反汇编
2CA2:0000B8A12CMOVAX,2CA1
2CA2:00038ED8MOVDS,AX
2CA2:0005B400MOVAH,00
2CA2:0007B000MOVAL,00
2CA2:0009B700MOVBH,00
2CA2:000BBE0000MOVSI,0000
2CA2:000EB90A00MOVCX,000A
2CA2:0011803C00CMPBYTEPTR[SI],00
2CA2:00147407JZ001D
2CA2:0016790AJNS0022
2CA2:0018FEC0INCAL
2CA2:001AEB08JMP0024
2CA2:001C90NOP
2CA2:001DFEC7INCBH
2CA2:001FEB03JMP0024
—U
2CA2:002190NOP
2CA2:0022FEC4INCAH
2CA2:002446INCSI
2CA2:0025E2EALOOP0011
2CA2:002788260A00MOV[000A],AH
2CA2:002BA20B00MOV[000B],AL
2CA2:002E883E0C00MOV[000C],BH
2CA2:0032B44CMOVAH,4C
2CA2:0034CD21INT21
-g=032
AX=0403BX=0300CX=0000DX=0000SP=0000BP=0000SI=000ADI=0000 DS=2CA1ES=2C91SS=2CA1CS=2CA2IP=0032NVUPEIPLNZNAPENC
2CA2:0032B44CMOVAH,4C
-d0000000f;10个数据后存个数,分别为4,3,3
2CA1:000002FD0005F9000008-06F7040303000000.....
三、实验步骤
1、上机调试、运行实验指导中的参考程序。
2、编程序计算S=1+2+3+.....+10,并把和放在BL中。
(用LOOP指令)
3、编写程序,在一行上依次显示26个大写英文字母。
(教材69页例4.14)
4、调试教材71页例4.16的程序。
四、实验报告
1、写出实验内容二的源程序。
2、写出实验内容四的源程序。
实验五变量的使用及字符串的输入输出
一、实验目的:
1、掌握变量的基本使用方法。
2、掌握字符串的输入输出方法的使用。
3、掌握数据段的定义方法。
二、上机实验指导:
数据段开始区域中,连续存放着10个无符号数,编程序找出这10个数中最大的一个数,并将其存到该数据区的后面。
(LX81.ASM)
datasegment
buf1db60h,50h,20h,40h,80h,90h,00h,10h,30h,70h
buf2db?
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
movsi,offsetbuf1
moval,[si]
movcx,9
go:
incsi
cmpal,[si]
jncnext
moval,[si]
next:
loopgo
movbuf2,al
movah,4ch
int21h
codeends
endstart
C:\MASM\DEBUGLX81.EXE
-U
12AF:0000B8AE12MOVAX,12AE
12AF:00038ED8MOVDS,AX
12AF:0005BE0000MOVSI,0000
12AF:00088A04MOVAL,[SI]
12AF:000AB90900MOVCX,0009
12AF:000D46INCSI
12AF:000E3A04CMPAL,[SI]
12AF:00107302JNB0014
12AF:00128A04MOVAL,[SI]
12AF:0014E2F7LOOP000D
12AF:0016A20A00MOV[000A],AL
12AF:0019B44CMOVAH,4C
12AF:001BCD21INT21
12AF:001DC45EF4LESBX,[BP-0C]
-G=019
AX=1290BX=0000CX=0000DX=0000SP=0000BP=0000SI=0009DI=0000
DS=12AEES=129ESS=12AECS=12AFIP=0019OVUPEIPLNZNAPONC
12AF:0019B44CMOVAH,4C
-D0000000f;最大数为90H
12AE:00006050204080900010-3070900000000000
三、实验步骤
1、上机调试、运行实验指导中的参考程序。
2、复习上几个实验中,用到数据段的几个程序,加深练习。
3.已知字符串…ABCDEFGH‟位于数据段开始的区域中,编程序将该字符串
转换为小写后,存于其后。
4、调试运行程序:教材86页例5.8。
5、编写程序完成如下功能:
输入一个字符串,在下一行原样输出。
(教材87页例5.9)
四、实验报告
1、写出实验内容3的源程序。
2、写出实验内容5的源程序。
实验六数据运算指令及伪指令的使用
一、实验目的:
1、掌握几种常用的数据运算指令的使用方法。
2、掌握几种常用的逻辑运算指令的使用方法。
3、掌握查表指令的使用方法。
二、上机实验指导:
数据段开始区域中,连续存放着10个无符号数,编程序找出这10个数中奇数的个数,并将其存到该数据区的后面。
(LX91.ASM)
datasegment
buf1db64h,52h,25h,47h,86h,98h,30h,17h,34h,79h
buf2db?
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
xorbx,bx
movsi,offsetbuf1
movcx,10
go:
testbyteptr[si],1
jznext
incbl
next:
incsi
loopgo
movbuf2,bl
movah,4ch
int21h
codeends
endstart
C:\MASM\DEBUGLX81.EXE
-U
12AF:0000B8AE12MOVAX,12AE
12AF:00038ED8MOVDS,AX
12AF:000533DBXORBX,BX
12AF:0007BE0000MOVSI,0000
12AF:000AB90A00MOVCX,000A
12AF:000DF60401TESTBYTEPTR[SI],01
12AF:00107402JZ0014
12AF:0012FEC3INCBL
12AF:001446INCSI
12AF:0015E2F6LOOP000D
12AF:0017881E0A00MOV[000A],BL
12AF:001BB44CMOVAH,4C
12AF:001DCD21INT21
12AF:001FF4HLT
-G=01b
AX=12AEBX=0004CX=0000DX=0000SP=0000BP=0000SI=000ADI=0000
DS=12AEES=129ESS=12AECS=12AFIP=001BNVUPEIPLNZNAPENC 12AF:001BB44CMOVAH,4C
-D0000000f
;奇数的个数为4个
12AE:00006452254786983017-3479040000000000
三、实验步骤
1、上机调试、运行实验指导中的参考程序。
2、调试运行程序:教材92页例5.13。
3、调试运行程序:教材103页例5.21。
四、实验报告
1、写出实验内容3的源程序。
2、写出实验内容5的源程序。
实验七子程序设计(一)
一、实验目的:
1、掌握子程序设计的基本方法。
2、掌握子程序中调用和返回指令的使用。
3、掌握子程序设计时参数传递的几种方法。
二、上机实验指导:
编程序求下列和值:
S=(1+2+3)+(1+2+3+4)+(1+2+3+4+5)
将和值存在数据段偏移量为0100H的单元中。
(EX10-1.ASM)datasegment
org0100h
vardb?;VAR存放和值
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
┌movah,3;调用求和子程序
│callsum
└movdh,bh
┌movah,4;调用求和子程序
│callsum
└adddh,bh
┌movah,5;调用求和子程序
│callsum
└adddh,bh
movvar,dh;和存入VAR movah,4ch
int21h
┌─sumprocnear;求累加和子程序│movch,0;入口参数:AH终值
│movbh,0;出口参数:BH累加和│go:incch
│addbh,ch;CH:计数器
│cmpah,ch
│jnzgo
│ret
└─sumendp
codeends
endstart
C:\MASM\DEBUGEX10-1.EXE
-U002E
36E6:0000B80020MOVAX,2000
36E6:00038ED8MOVDS,AX
36E6:0005B403MOVAH,03
36E6:0007E81800CALL0022
36E6:000A8AF7MOVDH,BH
36E6:000CB404MOVAH,04
36E6:000EE81100CALL0022
36E6:001102F7ADDDH,BH
36E6:0013B405MOVAH,05
36E6:0015E80A00CALL0022
36E6:001802F7ADDDH,BH
36E6:001A88360001MOV[0100],DH 36E6:001EB44CMOVAH,4C
36E6:0020CD21INT21
;以下为子程序
36E6:0022B500MOVCH,00
36E6:0024B700MOVBH,00
36E6:0026FEC5INCCH
36E6:002802FDADDBH,CH
36E6:002A3AE5CMPAH,CH
36E6:002C75F8JNZ0026
36E6:002EC3RET
-G=0C;观察第一次求和,DH=06H
AX=0300BX=0600CX=032FDX=0600SP=0000BP=0000SI=0000DI=0000 DS=2000ES=36D6SS=36E6CS=36E6IP=000CNVUPEIPLZRNAPENC
36E6:000CB404MOVAH,04
-G=013;观察第二次求和,DH=10H
AX=0400BX=0A00CX=042FDX=1000SP=0000BP=0000SI=0000DI=0000 DS=2000ES=36D6SS=36E6CS=36E6IP=0013NVUPEIPLNZACPONC
36E6:0013B405MOVAH,05
-G=01E;观察第三次求和,DH=1FH
AX=0500BX=0F00CX=052FDX=1F00SP=0000BP=0000SI=0000DI=0000 DS=2000ES=36D6SS=36E6CS=36E6IP=001ENVUPEIPLNZNAPONC
36E6:001EB44CMOVAH,4C
-d0*******;观察存储单元
2000:01001F.
三、实验步骤
1、上机调试、运行实验指导中的参考程序。
2、调试运行程序:教材114页例6.3。
3、调试运行程序:教材118页例6.6。
四、实验报告
1、写出实验内容二的源程序。
2、写出实验内容三的源程序。
实验八子程序设计(二)
一、实验目的:
1、继续掌握子程序设计的基本方法。
2、掌握子程序设计时参数传递的几种方法。
二、上机实验指导:
编写子程序:求数据段中一系列数据之和,并存于其后。
(EX11.ASM)datasegment
buf1db03h,02h,05h,07h,06h,08h,00h,01h,04h,09h
buf2db?
dataends
codesegment
assumecs:code,ds:data
start:
movds,ax
movsi,offsetbuf1
movcx,10
callsum
movah,4ch
int21h
sumprocnear
pushbx
xorbx,bx
go:
addbl,[si]
incsi
loopgo
mov[si],bl
sumendp
codeends
endstart
C:\MASM\DEBUGEX11.EXE
-U
12AF:0000B8AE12MOVAX,12AE
12AF:00038ED8MOVDS,AX
12AF:0005BE0000MOVSI,0000
12AF:0008B90A00MOVCX,000A
12AF:000BE80400CALL0012
12AF:000EB44CMOVAH,4C
12AF:0010CD21INT21
12AF:001253PUSHBX
12AF:001333DBXORBX,BX
12AF:0015021CADDBL,[SI]
12AF:001746INCSI
12AF:0018E2FBLOOP0015
12AF:001A881CMOV[SI],BL
12AF:001C82FF83CMPBH,83
12AF:001FC4065DC3LESAX,[C35D]
-G=0e
AX=0000BX=000ECX=0000DX=0000SP=FFFCBP=0000SI=000ADI=0000 DS=12AEES=0503SS=12AECS=12AFIP=000ENVUPEINGNZACPECY
12AF:000EB44CMOVAH,4C
-d0000000f;十个数之和为2DH(45)
12AE:00000302050706080001-04092D0000000000
1、上机调试、运行实验指导中的参考程序。
2、调试运行程序:教材114页例6.10。
3、调试运行程序:教材118页例6.14。
四、实验报告
1、写出实验内容二的源程序。
2、写出实验内容三的源程序。
实验九移位指令和串操作指令
一、实验目的:
1、掌握串操作指令和重复操作前缀的使用。
2、掌握移位指令的使用方法。
二、上机实验指导:
比较两字符串是否相同。
如相同,显示'match',否则显示'nomatch'。
(lx12-1.asm)
datasegment
str1db'aabbccdd'
str2db'aabbccdd'
msg1db'match',13,10,'$'
msg2db'nomatch',13,10,'$'
dataends
codesegment
assumecs:code,ds:data,es:data
start:
movax,data
movds,ax
moves,ax
leasi,str1
leadi,str2
cld
movcx,8
repzcmpsb
jzmatch
leadx,msg2
jmpdisp
match:
leadx,msg1
disp:
movah,9
int21h
movah,4ch
int21h
codeends
endstart
C:\MASM\DEBUGLX12-1.EXE
-U
14A1:0000B89E14MOVAX,149E
14A1:00038ED8MOVDS,AX
14A1:00058EC0MOVES,AX
14A1:00078D360000LEASI,[0000]
14A1:000B8D3E0800LEADI,[0008]
14A1:000FFCCLD
14A1:0010B90800MOVCX,0008
14A1:0013F3REPZ
14A1:0014A6CMPSB
14A1:00157406JZ001D
14A1:00178D161800LEADX,[0018]
14A1:001BEB04JMP0021
14A1:001D8D161000LEADX,[0010]
14A1:0021B409MOVAH,09
14A1:0023CD21INT21
14A1:0026B44CMOVAH,4C
14A1:0027CD21INT21
-G=026
match
AX=0924BX=0000CX=0000DX=0010SP=0000BP=0000SI=0008DI=0010 DS=149EES=149ESS=149ECS=14A1IP=0025NVUPEIPLZRNAPENC
14A1:0025B44CMOVAH,4C
-E0000'bbaa';将源串修改为…bbaaccdd‟
-G=026
nomatch
AX=0924BX=0000CX=0007DX=0018SP=0000BP=0000SI=0001DI=0009 DS=149EES=149ESS=149ECS=14A1IP=0025NVUPEIPLNZNAPONC
14A1:0025B44CMOVAH,4C
三、实验步骤
1、上机调试、运行实验指导中的参考程序,可以从DOS命令行运行
程序,查看结果。
2、已知字符串STR1位于数据段从0100H开始的区域中,其内容为…AAABBCCDD‟,编程序将该字符串传送至0200H开始的区域中。
(用串操作指令)
3、AX寄存器中存放一个16位二进制数,统计AX中“1”的个数
并把结果存于CX寄存器中。
4、在数据段定义如下无符号数:
buf1db12H,7FH,56H,80H,0FEH,34H,45H,0A4H
将以上数据高低4位互换后存于其后。
(用串操作指令)
四、实验报告
1、写出实验内容二的源程序。
2、写出实验内容三的源程序。
实验十输入输出与终端控制
一、实验目的:
1、掌握计算机系统中常用的输入输出方法。
2、掌握键盘与屏幕的控制技术。
二、上机实验指导:
在显示器上绘制一方框图形。
(lx12-1.asm)datasegment
rowdw40;开始点横坐标
columdw80;开始点纵坐标
lxdw60;X方向的长度
lydw40;Y方向的长度
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
movah,0
moval,6
int10h;置显示模式为640*200图形方式
movdx,row
movcx,colum
callsubx;画上面横线
movdx,row
movcx,colum
addcx,lx
callsuby;画右边竖线
movdx,row
movcx,colum
callsuby;画左边竖线
movdx,row
adddx,ly
movcx,colum
callsubx;画下面横线
movah,4ch
int21h
subxproc;画横线子程序
movbp,lx;置线长
lop1:
movbh,0;置页号
inccx;横坐标加1
moval,1
movah,0ch
int10h;写象素
decbp
jnelop1
ret
subxendp
subyproc;画竖线子程序
movbp,ly;置线长
lop2:
movbh,0;置页号
incdx;纵坐标加1
moval,1
movah,0ch
int10h;写象素
decbp
jnelop2
ret
subyendp
codeends
endstart
三、实验步骤
1、上机调试、运行实验指导中的参考程序。
2、运行并调试程序:教材172页例8.2。
3、运行并调试程序:教材187页例8.4。
四、实验报告
1、写出实验内容二的源程序。
2、写出实验内容三的源程序。