微机原理实验一报告 (1)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理实验一

1.DEBUG 的基本操作:

(1)从WINDOWS 进入DOS 之后,输入命令启动DEBUG:

C:>DEBUG 回车

(2)输入R 命令,查看和记录CPU 各个寄存器的内容:

-R 回车

看到什么?

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0100 NV UP EI PL NZ NA PO NC 16D3:0100 0000 ADD [BX+SI],AL DS:0000=CD

(3)输入 A 命令,汇编下面的字符“WINDOWS”显示程序(DEBUG 调试环境中,默认为十六进制,因此源程序中十六进制数后面不写H):

-A 100 ;从偏移地址是0100H 处开始写指令

MOV AH,2

MOV DL, 57 ;57H 是“W”的ASCII 码

INT 21 ;INT 21 是DOS 功能调用,AH=2 代表2 号功;能。这3 句合起来的功能是:显示DL 中的字符

MOV DL, 49

INT 21

MOV DL, 4E

INT 21

MOV DL, 44

INT 21

MOV DL, 4F

INT 21

MOV DL, 57

INT 21

MOV DL, 53

INT 21

INT 3 ;功能是产生一个断点,不要省略

(4)输入U 命令反汇编上面的程序:

-U 100

问:这里100代表什么?

反汇编从0100开始

(5)输入G命令连续运行上面的程序,记录运行结果:

-G=100

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0100 NV UP EI PL NZ NA PO NC 16D3:0100 B402 MOV AH,02

(6)输入E命令把上面程序中的数据57,49,4E,44,4F,57,53依次分别改为57,

45,4C,43,4F,4D,45:

-E 103 回车(以下同)

-E 107

-E 10B

-E 10F

-E 113

-E 117

-E 11B

(7)输入D命令查看程序机器码的存放情况:

-D 100 11E ;看从100开始到11E的机器码

(8)输入G命令再连续运行程序,并记录运行结果:

-G=100

WELCOME

AX=0245 BX=0000 CX=0000 DX=0045 SP=FFEE BP=0000 SI=0000 DI=0000

DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=011E NV UP EI PL NZ NA PO NC 16D3:011E CC INT 3

(9)依次输入下面的T命令(单步执行)和G命令(设置断点并启动运行),记录各

命令的运行结果:

-T=100 回车

-G=100 106 回车

-G=100 10A 回车

-G=100 10E 回车

-G=100 11E 回车

T=100

AX=0245 BX=0000 CX=0000 DX=0045 SP=FFEE BP=0000 SI=0000 DI=0000

DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0102 NV UP EI PL NZ NA PO NC 16D3:0102 B257 MOV DL,57

-g=100 106

W

-g=100 10a

WE

-g=100 10e

WEL

-g=100 11e

WELCOME

2.一字节十六进制数转换为ASCII码(只考虑大写字母)

用E命令在DS:1000单元中存放十六进制数5A,用A命令从CS:0100单元开始存放下面程序的机器码,并调试运行(DEBUG调试环境中,源程序中十六进制数后面不写H):

CS:0100 8D360010 LEA SI,[1000] ;将EA=1000送入SI中0104 8D3E2010 LEA DI,[1020] ;将EA=1020送入DI中

0108 8A04 MOV AL,[SI] ;(AL)←((SI))

010A 240F MOV BL,AL ;将AL中的一个字送入BL

010C 240F AND AL,0F ;(AL)←(AL)^(01H)

010E E80E00 CALL 011F ;调用EA=011F中的指令

0111 80E30 AND BL,F0 ;(BL)←(BL)^(F0H)

0114 B90400 MOV CX,4 ;将立即数4送入CX中

0117 D2EB SHR BL,CL ;将BL中的内容左移CL

;中指出的位数,且每次移位最低位补0 0119 88D8 MOV AL,BL ;将BL中的一个字送入AL

011B E80100 CALL 011F ;调用EA=011F中的指令

011E F4 RET :返回指令

011F 3C09 CMPAL,09 ;(AL)-09,根据结果设置标志位

0121 7602 JBE 0125 ;执行EA=0125的指令

0123 0407 ADD AL,07 ;(AL)←(AL)+07H

0125 0430 ADD AL,30 ;(AL)←(AL)+30H

0127 8805 MOV [DI],AL ;(AL)送入EA=(DI)的单元中

0129 47 INC DI ;(DI)←(DI)+1

012A C3 RET ;返回指令

运行结果:

1)写出执行上述程序的命令行-G=100

2)程序执行后,[1020]=_____41_____,[1021]=___35______。

3)思考:NOP 是空操作指令,若在ADD AL,07后面,加一条NOP,结果会如何?

结果不变但占了内存

3、搜索字符串结束标志,统计搜索的字符个数

用E命令在DS:1000开始的单元中存放若干个ASCII字符,例如:30,31,32……39,0D。(0D作为字符串结束标志,实验中请输入与示例不同的字符组合)。

相关文档
最新文档