1、汇编语言分支结构程序设计实验汇编语言-分支结构程序设计实验 汇编语言实验报告 实验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单元)。
2、 程序如下: DATA SEGMENT DAT DB 0A5H,2 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX MOV AL, DAT MOV BL, AL MOV CL, 4 SHL BL, CL MOV DAT+1, BL AND AL, 0FH MOV DAT+2, AL MOV AH, 4CH INT 21H CODE ENDS END START 上机运行该程序并检查运行结果是否正确。 3.实验运行结果: (1) 1401:0000 B80014 MOV 140
3、1:0003 8ED8 MOV DS,AX 1401:0005 A00000 MOV AL,0000 1401:0008 8AD8 MOV BL,AL 1401:000A B104 MOV CL,04 1401:000C D2E3 SHL BL,CL 1401:000E 881E0100 MOV 0001,BL 1401:0012 240F AND AL,0F 1401:0014 A20200 MOV 0002,AL 1401:0017 B44C MOV AH,4C 1401:0019 CD21 INT 21 1401:001B FE8946F6 DEC BYTE PTR BX+DI+F646
4、 1401:001F EB06 JMP 0027 段首地址为:1400 运行前的结果: -d 1400:0,F 1400:0000 . 运行后的结果: -g Program terminated normally -d 1400:0,f 1400:0000 .P. 单步运行结果: BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13F0 ES=13F0 SS=1400 CS=1401 IP=0003 NV UP EI PL NZ NA PO NC 1401:0003 8ED8 MOV DS,AX -t AX=1400 BX=
5、0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NC MOV AL,0000 DS:0000=A5 -t BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NC MOV BL,AL -t AX=14A5 CX=002B DX=0000 SP=0000 BP=0000
6、SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NC MOV CL,04 -t AX=14A5 BX=00A5 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NC SHL BL,CL - AX=14A5 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL
7、 NZ NA PE NC MOV 0001,BL DS:0001=50 -t BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NC 1401:0012 240F AND AL,0F -t BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NC MOV 0002,
8、AL DS:0002=05 -t AX=1405 BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NC MOV AH,4C - AX=4C05 BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 SS=1400 CS=1401 NV UP EI PL NZ NA PE NC INT 21 程序2: DATA X Y SEGMENT DB 20H DW ? ENDS S
9、EGMENT MOV AX,DATA ;把X的值转移到AL ;清零AH ;定义X为字类型并赋值20H ;定义Y为字节类型 DATA CODE START: ASSUME CS:CODE,DS:DATA MOV MOV DS,AX AL,X XOR AH,AH SHL AX,1 MOV MOV ;将目的操作数向左移动1位 ;移位大于1,需用CL ;将目的操作数向左移动2位 ;把AX与BX中的值相加 ;返回DOS状态下 BX,AX CL,2 SHL AX,CL ADD AX,BX MOV MOV Y,AX AH,4CH INT 21H ENDS END START CODE 运行结果: 1401:
10、0000 B80014 MOV AX,1400 1401:0003 8ED8 MOV DS,AX 1401:0005 A00000 MOV AL,0000 1401:0008 32E4 XOR AH,AH 1401:000A D1E0 SHL AX,1 1401:000C 8BD8 MOV BX,AX 1401:000E B102 MOV CL,02 1401:0010 D3E0 SHL AX,CL 1401:0012 03C3 ADD AX,BX 1401:0014 A30100 MOV 0001,AX 1401:0017 B44C MOV AH,4C 1401:0019 CD21 INT
11、21 1401:001B FE8946F6 DEC BYTE PTR BX+DI+F646 1401:001F EB06 JMP 0027 - 首地址:1400 运行前结果: -d 1400:0,f 1400:0000 . -t 运行后结果: Program terminated normally -d 1400:0,f 1400:0000 . 单步调试: -t AX=-t AX=-t AX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 N
12、V UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX -t AX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NC MOV AL,0000 DS:0000=20 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA
13、PO NC XOR AH,AH -t BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NC SHL AX,1 -g BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX -t AX=1400 B
14、X=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NC MOV AL,0000 DS:0000=20 -t BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NC XOR AH,AH -t BX=0000 CX=002B DX=0000 SP=0000 BP=000
15、0 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NC SHL AX,1 -g BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX -t AX=13FB BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS
16、=1400 ES=13EB SS=13FB CS=13FC NV UP EI PL NZ NA PO NC MOV AL,0000 DS:0000=20 -t BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NC XOR AH,AH -t BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400 CS=13FC NV UP E
17、I PL ZR NA PE NC SHL AX,1 -g 程序3: DATA SEGMENT ORG 1000H BIN DB ? HEX DB 6Bh ORG 1030H DB 00H, 01H,02H,03H,04H,05H,06H,07H,08H,09H ORG 1040H DB 0AH,0BH,0CH,0DH,0EH,0FH DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,HEX MOV BX,OFFSET BIN SUB AH,AH ADD BX,AX MOV DL,B
18、X MOV CL,4 SHL DL,CL MOV AL,HEX+1 MOV BX,OFFSET BIN XOR AH,AH ADD BX,AX MOV Ax,BX OR Al,DL MOV BIN,AL MOV AH,4CH INT 21H CODE ENDS END START 运行结果: 1505:0000 B80014 MOV 1505:0003 8ED8 MOV DS,AX 1505:0005 A00110 MOV AL,1001 1505:0008 BB0010 MOV BX,1000 1505:000B 2AE4 SUB AH,AH 1505:000D 03D8 ADD BX,AX
19、 1505:000F 8A17 MOV DL,BX 1505:0011 B104 MOV CL,04 1505:0013 D2E2 SHL DL,CL 1505:0015 A00210 MOV AL,1002 1505:0018 BB0010 MOV BX,1000 1505:001B 32E4 XOR AH,AH 1505:001D 03D8 ADD BX,AX 1505:001F 8BC3 MOV AX,BX 首地址:1400 -运行前结果: -d 1400:0,f 1400:0000 . . - 运行后结果: -d 1400:0,f 1400:0000 . 单步调试: BX=0000 C
20、X=107A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13F0 ES=13F0 SS=1400 CS=1505 IP=0003 NV UP EI PL NZ NA PO NC 1505:0003 8ED8 MOV DS,AX -T AX=1400 BX=0000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOV AL,1001 DS:1001=6B -T BX=0000 CX=107A
21、 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PO NC MOV BX,1000 -T AX=146B CX=107A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC SUB AH,AH -T BX=1000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0
22、 SS=1400 CS=1505 NV UP EI PL ZR NA PE NC ADD BX,AX - AX=006B CX=107A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOV DL,BX DS:106B=32 -t AX=006B BX=106B CX=107A SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC
23、 MOV CL,04 -t AX=006B BX=106B CX=1004 DX=0032 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PO NC SHL DL,CL -t AX=006B BX=106B CX=1004 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO CY MOV AL,1002 DS:1002=00 -t BX=106B CX=1004 DX=0020
24、 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO CY MOV BX,1000 - AX=0000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO CY XOR AH,AH -t AX=0000 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400
25、ES=13F0 SS=1400 CS=1505 NV UP EI PL ZR NA PE NC ADD BX,AX -t AX=0000 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PE NC MOV AX,BX -t BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PE NC OR
26、 AL,DL -t BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOV 1000,AL DS:1000=20 - -t AX=1020 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOV AH,4C - 心得体会: 写程序时,对于有些特定的指令不太熟,有时还得借助于课本,不能脱离课本编程。应该加大力度记一些指令,及多看看一些好的程序代码,多做一些题目,来提高自身的编程能力。编程时得多注意一些中英文的符号不能换乱,学会用全部转换的功能然后转换需要转换的符号。