汇编语言分支结构程序设计实验.docx
《汇编语言分支结构程序设计实验.docx》由会员分享,可在线阅读,更多相关《汇编语言分支结构程序设计实验.docx(15页珍藏版)》请在冰点文库上搜索。
汇编语言分支结构程序设计实验
汇编语言实验报告
实验6汇编语言
分支结构程序设计
学院:
计算机学院
班级:
计Y112班
姓名:
梁建辉
学号:
201100403067
2012年12月1日
1.实验目的:
(1)掌握汇编语言顺序结构设计方法
(2)熟悉常用汇编指令的用法
(3)学会用debug输入、运行小程序,并检查运行情况的方法
(4)学会在pc机上建立、汇编、连接、调试和运行80x86汇编语言程序的过程
2.实验内容:
(1)调试程序1:
将存储单元DAT+1中的两个压缩的bcd码拆成2个非压缩的不承担码(高位bcd码放在DAT+1单元,地位bcd码放在DAT+2单元)。
程序如下:
DATASEGMENT
DATDB0A5H,2DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,DAT
MOVBL,AL
MOVCL,4
SHLBL,CL
MOVDAT+1,BL
ANDAL,0FH
MOVDAT+2,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
上机运行该程序并检查运行结果是否正确。
3.实验运行结果:
(1)
1401:
0000B80014MOVAX,1400
1401:
00038ED8MOVDS,AX
1401:
0005A00000MOVAL,[0000]
1401:
00088AD8MOVBL,AL
1401:
000AB104MOVCL,04
1401:
000CD2E3SHLBL,CL
1401:
000E881E0100MOV[0001],BL
1401:
0012240FANDAL,0F
1401:
0014A20200MOV[0002],AL
1401:
0017B44CMOVAH,4C
1401:
0019CD21INT21
1401:
001BFE8946F6DECBYTEPTR[BX+DI+F646]
1401:
001FEB06JMP0027
段首地址为:
1400
运行前的结果:
-d1400:
0,F
1400:
0000A500000000000000-0000000000000000................
运行后的结果:
-g
Programterminatednormally
-d1400:
0,f
1400:
0000A550050000000000-0000000000000000.P..............
单步运行结果:
AX=1400BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=13F0ES=13F0SS=1400CS=1401IP=0003NVUPEIPLNZNAPONC
1401:
00038ED8MOVDS,AX
-t
AX=1400BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=0005NVUPEIPLNZNAPONC
1401:
0005A00000MOVAL,[0000]DS:
0000=A5
-t
AX=14A5BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=0008NVUPEIPLNZNAPONC
1401:
00088AD8MOVBL,AL
-t
AX=14A5BX=00A5CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=000ANVUPEIPLNZNAPONC
1401:
000AB104MOVCL,04
-t
AX=14A5BX=00A5CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=000CNVUPEIPLNZNAPONC
1401:
000CD2E3SHLBL,CL
-
AX=14A5BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=000ENVUPEIPLNZNAPENC
1401:
000E881E0100MOV[0001],BLDS:
0001=50
-t
AX=14A5BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=0012NVUPEIPLNZNAPENC
1401:
0012240FANDAL,0F
-t
AX=1405BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=0014NVUPEIPLNZNAPENC
1401:
0014A20200MOV[0002],ALDS:
0002=05
-t
AX=1405BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=0017NVUPEIPLNZNAPENC
1401:
0017B44CMOVAH,4C
-
AX=4C05BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401IP=0019NVUPEIPLNZNAPENC
1401:
0019CD21INT21
程序2:
DATASEGMENT
XDB20H;定义X为字类型并赋值20H
YDW?
;定义Y为字节类型
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,X;把X的值转移到AL
XORAH,AH;清零AH
SHLAX,1;将目的操作数向左移动1位
MOVBX,AX
MOVCL,2;移位大于1,需用CL
SHLAX,CL;将目的操作数向左移动2位
ADDAX,BX;把AX与BX中的值相加
MOVY,AX
MOVAH,4CH;返回DOS状态下
INT21H
CODEENDS
ENDSTART
运行结果:
1401:
0000B80014MOVAX,1400
1401:
00038ED8MOVDS,AX
1401:
0005A00000MOVAL,[0000]
1401:
000832E4XORAH,AH
1401:
000AD1E0SHLAX,1
1401:
000C8BD8MOVBX,AX
1401:
000EB102MOVCL,02
1401:
0010D3E0SHLAX,CL
1401:
001203C3ADDAX,BX
1401:
0014A30100MOV[0001],AX
1401:
0017B44CMOVAH,4C
1401:
0019CD21INT21
1401:
001BFE8946F6DECBYTEPTR[BX+DI+F646]
1401:
001FEB06JMP0027
-
首地址:
1400
运行前结果:
-d1400:
0,f
1400:
00002000000000000000-0000000000000000...............
-t
运行后结果:
Programterminatednormally
-d1400:
0,f
1400:
00002040010000000000-0000000000000000@..............
单步调试:
-t
AX=-t
AX=-t
AX=1400BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=13EBES=13EBSS=1400CS=13FCIP=0003NVUPEIPLNZNAPONC
13FC:
00038ED8MOVDS,AX
-t
AX=1400BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCIP=0005NVUPEIPLNZNAPONC
13FC:
0005A00000MOVAL,[0000]DS:
0000=20
-t
AX=1320BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCIP=0008NVUPEIPLNZNAPONC
13FC:
000832E4XORAH,AH
-t
AX=0020BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCIP=000ANVUPEIPLZRNAPENC
13FC:
000AD1E0SHLAX,1
-g
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=13EBES=13EBSS=1400CS=13FCIP=0003NVUPEIPLNZNAPONC
13FC:
00038ED8MOVDS,AX
-t
AX=1400BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCIP=0005NVUPEIPLNZNAPONC
13FC:
0005A00000MOVAL,[0000]DS:
0000=20
-t
AX=1320BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCIP=0008NVUPEIPLNZNAPONC
13FC:
000832E4XORAH,AH
-t
AX=0020BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCIP=000ANVUPEIPLZRNAPENC
13FC:
000AD1E0SHLAX,1
-g
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=13EBES=13EBSS=1400CS=13FCIP=0003NVUPEIPLNZNAPONC
13FC:
00038ED8MOVDS,AX
-t
AX=13FBBX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=13FBCS=13FCIP=0005NVUPEIPLNZNAPONC
13FC:
0005A00000MOVAL,[0000]DS:
0000=20
-t
AX=1320BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCIP=0008NVUPEIPLNZNAPONC
13FC:
000832E4XORAH,AH
-t
AX=0020BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCIP=000ANVUPEIPLZRNAPENC
13FC:
000AD1E0SHLAX,1
-g
程序3:
DATASEGMENT
ORG1000H
BINDB?
HEXDB6Bh
ORG1030H
DB00H,01H,02H,03H,04H,05H,06H,07H,08H,09H
ORG1040H
DB0AH,0BH,0CH,0DH,0EH,0FH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,HEX
MOVBX,OFFSETBIN
SUBAH,AH
ADDBX,AX
MOVDL,[BX]
MOVCL,4
SHLDL,CL
MOVAL,HEX+1
MOVBX,OFFSETBIN
XORAH,AH
ADDBX,AX
MOVAx,BX
ORAl,DL
MOVBIN,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果:
1505:
0000B80014MOVAX,1400
1505:
00038ED8MOVDS,AX
1505:
0005A00110MOVAL,[1001]
1505:
0008BB0010MOVBX,1000
1505:
000B2AE4SUBAH,AH
1505:
000D03D8ADDBX,AX
1505:
000F8A17MOVDL,[BX]
1505:
0011B104MOVCL,04
1505:
0013D2E2SHLDL,CL
1505:
0015A00210MOVAL,[1002]
1505:
0018BB0010MOVBX,1000
1505:
001B32E4XORAH,AH
1505:
001D03D8ADDBX,AX
1505:
001F8BC3MOVAX,BX
首地址:
1400
-运行前结果:
-d1400:
0,f
1400:
00000000000000000000-0000000000000000................
.....
-
运行后结果:
-d1400:
0,f
1400:
00000000000000000000-0000000000000000...........
单步调试:
AX=1400BX=0000CX=107ADX=0000SP=0000BP=0000SI=0000DI=0000
DS=13F0ES=13F0SS=1400CS=1505IP=0003NVUPEIPLNZNAPONC
1505:
00038ED8MOVDS,AX
-T
AX=1400BX=0000CX=107ADX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0005NVUPEIPLNZNAPONC
1505:
0005A00110MOVAL,[1001]DS:
1001=6B
-T
AX=146BBX=0000CX=107ADX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0008NVUPEIPLNZNAPONC
1505:
0008BB0010MOVBX,1000
-T
AX=146BBX=1000CX=107ADX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=000BNVUPEIPLNZNAPONC
1505:
000B2AE4SUBAH,AH
-T
AX=006BBX=1000CX=107ADX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=000DNVUPEIPLZRNAPENC
1505:
000D03D8ADDBX,AX
-
AX=006BBX=106BCX=107ADX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=000FNVUPEIPLNZNAPONC
1505:
000F8A17MOVDL,[BX]DS:
106B=32
-t
AX=006BBX=106BCX=107ADX=0032SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0011NVUPEIPLNZNAPONC
1505:
0011B104MOVCL,04
-t
AX=006BBX=106BCX=1004DX=0032SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0013NVUPEIPLNZNAPONC
1505:
0013D2E2SHLDL,CL
-t
AX=006BBX=106BCX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0015NVUPEIPLNZNAPOCY
1505:
0015A00210MOVAL,[1002]DS:
1002=00
-t
AX=0000BX=106BCX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0018NVUPEIPLNZNAPOCY
1505:
0018BB0010MOVBX,1000
-
AX=0000BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=001BNVUPEIPLNZNAPOCY
1505:
001B32E4XORAH,AH
-t
AX=0000BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=001DNVUPEIPLZRNAPENC
1505:
001D03D8ADDBX,AX
-t
AX=0000BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=001FNVUPEIPLNZNAPENC
1505:
001F8BC3MOVAX,BX
-t
AX=1000BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0021NVUPEIPLNZNAPENC
1505:
00210AC2ORAL,DL
-t
AX=1020BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0023NVUPEIPLNZNAPONC
1505:
0023A20010MOV[1000],ALDS:
1000=20
-
-t
AX=1020BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505IP=0026NVUPEIPLNZNAPONC
1505:
0026B44CMOVAH,4C
-
心得体会:
写程序时,对于有些特定的指令不太熟,有时还得借助于课本,不能脱离课本编程。
应该加大力度记一些指令,及多看看一些好的程序代码,多做一些题目,来提高自身的编程能力。
编程时得多注意一些中英文的符号不能换乱,学会用全部转换的功能然后转换需要转换的符号。