汇编语言分支结构程序设计实验.docx
《汇编语言分支结构程序设计实验.docx》由会员分享,可在线阅读,更多相关《汇编语言分支结构程序设计实验.docx(15页珍藏版)》请在冰豆网上搜索。
![汇编语言分支结构程序设计实验.docx](https://file1.bdocx.com/fileroot1/2023-4/20/e696a18f-d66d-4947-9c9f-32a3e35a161c/e696a18f-d66d-4947-9c9f-32a3e35a161c1.gif)
汇编语言分支结构程序设计实验
汇编语言--分支结构程序设计实验
汇编语言实验报告
实验6汇编语言
分支结构程序设计
学院:
计算机学院班级:
姓名:
梁建辉学号:
[1**********]7
2019年12月1日
1.实验目的:
(1)
(2)
(3)
(4)掌握汇编语言顺序结构设计方法熟悉常用汇编指令的用法学会用debug输入、运行小程序,并检查运行情况的方法学会在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:
0000B80014MOV
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:
0000
................
运行后的结果:
-g
Programterminatednormally
-d1400:
0,f
1400:
0000
.P..............
单步运行结果:
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000DS=13F0ES=13F0SS=1400CS=1401IP=0003NVUPEIPLNZNAPONC1401:
00038ED8MOVDS,AX
-t
AX=1400BX=0000CX=002BDX=0000SP=0000BP=0000
SI=0000DI=0000DS=1400ES=13F0SS=1400CS=1401NVUPEIPLNZNAPONC
MOVAL,[0000]
DS:
0000=A5-t
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401NVUPEIPLNZNAPONC
MOVBL,AL
-t
AX=14A5CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401NVUPEIPLNZNAPONC
MOVCL,04
-t
AX=14A5BX=00A5SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401NVUPEIPLNZNAPONC
SHLBL,CL
-
AX=14A5CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401
NVUPEIPLNZNAPENC
MOV[0001],BL
DS:
0001=50-t
BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000DS=1400ES=13F0SS=1400CS=1401
NVUPEIPLNZNAPENC1401:
0012240FANDAL,0F
-t
BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000DS=1400ES=13F0SS=1400CS=1401NVUPEIPLNZNAPENC
MOV[0002],AL
DS:
0002=05-t
AX=1405BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1401NVUPEIPLNZNAPENCMOVAH,4C
-
AX=4C05BX=0050CX=0004DX=0000SP=0000BP=0000SI=0000DI=0000
SS=1400CS=1401NVUPEIPLNZNAPENCINT21
程序2:
DATA
XYSEGMENTDB20HDW?
ENDS
SEGMENT
MOVAX,DATA
;把X的值转移到AL;清零AH;定义X为字类型并赋值20H;定义Y为字节类型DATACODE
START:
ASSUMECS:
CODE,DS:
DATAMOVMOVDS,AXAL,XXORAH,AHSHLAX,1MOVMOV;将目的操作数向左移动1位;移位大于1,需用CL;将目的操作数向左移动2位;把AX与BX中的值相加;返回DOS状态下BX,AXCL,2SHLAX,CLADDAX,BXMOVMOVY,AXAH,4CHINT21HENDSENDSTARTCODE
运行结果:
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:
0000
...............
-t
运行后结果:
Programterminatednormally
-d1400:
0,f
1400:
0000
@..............
单步调试:
-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=1400
CS=13FCNVUPEIPLNZNAPONC
MOVAL,[0000]DS:
0000=20
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13EBSS=1400CS=13FCNVUPEIPLNZNAPONC
XORAH,AH
-t
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13EBSS=1400CS=13FCNVUPEIPLZRNAPENC
SHLAX,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=0000
SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCNVUPEIPLNZNAPONC
MOVAL,[0000]
DS:
0000=20
-t
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCNVUPEIPLNZNAPONC
XORAH,AH
-t
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCNVUPEIPLZRNAPENC
SHLAX,1
-g
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=13EBES=13EBSS=1400CS=13FCIP=0003NVUPEIPLNZNAPONC
13FC:
00038ED8
MOVDS,AX
-t
AX=13FBBX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=13FBCS=13FCNVUPEIPLNZNAPONC
MOVAL,[0000]
DS:
0000=20
-t
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13EBSS=1400CS=13FCNVUPEIPLNZNAPONC
XORAH,AH
-t
BX=0000CX=002BDX=0000SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13EBSS=1400CS=13FCNVUPEIPLZRNAPENC
SHLAX,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:
0000B80014MOV
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:
0000
................
.....
-
运行后结果:
-d1400:
0,f
1400:
0000
...........
单步调试:
BX=0000CX=107ADX=0000SP=0000BP=0000SI=0000DI=0000
DS=13F0ES=13F0SS=1400CS=1505IP=0003NVUPEIPLNZNAPONC
1505:
00038ED8MOVDS,AX
-T
AX=1400BX=0000CX=107ADX=0000SP=0000BP=0000
SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLNZNAPONC
MOVAL,[1001]
DS:
1001=6B
-T
BX=0000CX=107ADX=0000SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400NVUPEIPLNZNAPONC
MOVBX,1000
-T
AX=146B
CX=107ADX=0000SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLNZNAPONC
SUBAH,AH
-T
BX=1000CX=107ADX=0000SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLZRNAPENC
ADDBX,AX
-
AX=006BCX=107ADX=0000SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLNZNAPONC
MOVDL,[BX]
DS:
106B=32
-t
AX=006BBX=106BCX=107ASP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLNZNAPONC
MOV
CL,04
-t
AX=006BBX=106BCX=1004DX=0032SP=0000BP=0000
SI=0000DI=0000
DS=1400ES=13F0SS=1400NVUPEIPLNZNAPONC
SHL
DL,CL
-t
AX=006BBX=106BCX=1004SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505
NVUPEIPLNZNAPOCY
MOVAL,[1002]
DS:
1002=00
-t
BX=106BCX=1004DX=0020SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400CS=1505
NVUPEIPLNZNAPOCY
MOV
BX,1000
-
AX=0000CX=1004DX=0020SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLNZNAPOCY
XOR
AH,AH
-t
AX=0000BX=1000CX=1004DX=0020SP=0000BP=0000
SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLZRNAPENC
ADDBX,AX
-t
AX=0000BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505
NVUPEIPLNZNAPENC
MOVAX,BX
-t
BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400NVUPEIPLNZNAPENC
ORAL,DL
-t
BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000
DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLNZNAPONC
MOV[1000],AL
DS:
1000=20
-
-t
AX=1020BX=1000CX=1004DX=0020SP=0000BP=0000SI=0000DI=0000
DS=1400ES=13F0SS=1400CS=1505NVUPEIPLNZNAPONC
MOVAH,4C
-
心得体会:
写程序时,对于有些特定的指令不太熟,有时还得借助于课本,不能脱离课本编程。
应该加大力度记一些指令,及多看看一些好的程序代码,多做一些题目,来提高自身的编程能力。
编程时得多注意一些中英文的符号不能换乱,学会用全部转换的功能然后转换需要转换的符号。