微机实验操作.docx
《微机实验操作.docx》由会员分享,可在线阅读,更多相关《微机实验操作.docx(70页珍藏版)》请在冰豆网上搜索。
微机实验操作
实验一查看CPU和内存,用机器指令和汇编指令编程
2实验任务
(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。
机器码汇编指令寄存器
b8204emovax,4E20Hax=4E20H
051614addax,1416Hax=6236H
bb0020movBX,2000Hbx=2000H
01d8addax,bxax=8236H
89c3movbx,axbx=8236H
01d8addax,bxax=046CH
b81a00movax,001AHax=001AH
bb2600movbx,0026Hbx=0026H
00d8addal,blax=0040H
00dcaddah,blax=2640H
00c7addbh,albx=4026H
b400movah,0ax=0040H
00d8addal,blax=0066H
049caddal,9CHax=0002H
Microsoft(R)WindowsDOS
(C)CopyrightMicrosoftCorp1990-2001.
C:
\DOCUME~1\ADMINI~1>debug
-a
0C1C:
0100movax,4e20
0C1C:
0103addax,1416
0C1C:
0106movbx,2000
0C1C:
0109addax,bx
0C1C:
010Bmovbx,ax
0C1C:
010Daddax,bx
0C1C:
010Fmovax,001a
0C1C:
0112movbx,0026
0C1C:
0115addal,bl
0C1C:
0117addah,bl
0C1C:
0119addbh,al
0C1C:
011Bmovah,0
0C1C:
011Daddal,bl
0C1C:
011Faddal,9c
0C1C:
0121
-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0100NVUPEIPLNZNAPONC
0C1C:
0100B8204EMOVAX,4E20
-t
AX=4E20BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0103NVUPEIPLNZNAPONC
0C1C:
0103051614ADDAX,1416
-t
AX=6236BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0106NVUPEIPLNZNAPENC
0C1C:
0106BB0020MOVBX,2000
-t
AX=6236BX=2000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0109NVUPEIPLNZNAPENC
0C1C:
010901D8ADDAX,BX
-t
AX=8236BX=2000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=010BOVUPEINGNZNAPENC
0C1C:
010B89C3MOVBX,AX
-t
AX=8236BX=8236CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=010DOVUPEINGNZNAPENC
0C1C:
010D01D8ADDAX,BX
-t
AX=046CBX=8236CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=010FOVUPEIPLNZNAPECY
0C1C:
010FB81A00MOVAX,001A
-t
AX=001ABX=8236CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0112OVUPEIPLNZNAPECY
0C1C:
0112BB2600MOVBX,0026
-t
AX=001ABX=0026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0115OVUPEIPLNZNAPECY
0C1C:
011500D8ADDAL,BL
-t
AX=0040BX=0026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0117NVUPEIPLNZACPONC
0C1C:
011700DCADDAH,BL
-t
AX=2640BX=0026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0119NVUPEIPLNZNAPONC
0C1C:
011900C7ADDBH,AL
-t
AX=2640BX=4026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=011BNVUPEIPLNZNAPONC
0C1C:
011BB400MOVAH,00
-t
AX=0040BX=4026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=011DNVUPEIPLNZNAPONC
0C1C:
011D00D8ADDAL,BL
-t
AX=0066BX=4026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=011FNVUPEIPLNZNAPENC
0C1C:
011F049CADDAL,9C
-t
AX=0002BX=4026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0121NVUPEIPLNZACPOCY
0C1C:
0121D3990075RCRWORDPTR[BX+DI+7500],CLDS:
B526=0000
-q
实验一查看CPU和内存,用机器指令和汇编指令编程
(2)将下面的3条指令写入从2000:
0开始的内存单元中,利用这3条指令计算2的8次方。
movax,1
addax,ax
jmp2000:
0003
Microsoft(R)WindowsDOS
(C)CopyrightMicrosoftCorp1990-2001.
C:
\DOCUME~1\ADMINI~1>debug
-a2000:
0
2000:
0000movax,1
2000:
0003addax,ax
2000:
0005jmp2000:
0003
2000:
0007
-rcs
CS0C1C
:
2000
-rip
IP0100
:
0000
-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0000NVUPEIPLNZNAPONC
2000:
0000B80100MOVAX,0001
-t
AX=0001BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0003NVUPEIPLNZNAPONC
2000:
000301C0ADDAX,AX
-t
AX=0002BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0005NVUPEIPLNZNAPONC
2000:
0005EBFCJMP0003
-t
AX=0002BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0003NVUPEIPLNZNAPONC
2000:
000301C0ADDAX,AX
-t
AX=0002BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0003NVUPEIPLNZNAPONC
2000:
000301C0ADDAX,AX
-t
AX=0004BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0005NVUPEIPLNZNAPONC
2000:
0005EBFCJMP0003
-t
AX=0004BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0003NVUPEIPLNZNAPONC
2000:
000301C0ADDAX,AX
-t
AX=0008BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0005NVUPEIPLNZNAPONC
2000:
0005EBFCJMP0003
-t
AX=0008BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=2000IP=0003NVUPEIPLNZNAPONC
2000:
000301C0ADDAX,AX
-q
实验一查看CPU和内存,用机器指令和汇编指令编程
(3)查看内存中的内容
PC主板上的ROM中有个一出产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个出产日期并试图改变它。
Microsoft(R)WindowsDOS
(C)CopyrightMicrosoftCorp1990-2001.
C:
\DOCUME~1\ADMINI~1>debug
-dffff:
0f
FFFF:
0000EA5BE000F031322F-32352F303700FC59.[...12/25/07..Y
-q
地址C0000~FFFFF的内存单元为只读存储器,写入数据操作是无效的。
因此出产日期无法改变。
下面内容摘自于网上
还有另一种情况,如果你发现你能修改ROM中的生产日期,那么原因如下:
每个计算机的结构都不一样,教材考虑的是普通8086PC机上的效果,个别计算机的效果可能不同。
也就是说在你的计算机中这个内存是可修改的
所以,认为所有的计算机某些地址的内存不能修改是片面的。
书上说rom是只读的你就不去验证了吗?
如何验证呢?
我觉得这个实验最大的好处不是让我们验证了这个知识点,而是提醒我们要有怀疑的精神,怀疑之后再去验证才能跟深刻的理解知识,提升自己的能力,甚至还会发现有些书上描述的不准确甚至错误的地方。
--引用这几本书综合研究的三个问题:
都再用,我们就非得用吗?
规定了,我们就只知道遵守吗?
司空见惯,我们就不怀疑了吗?
尽信书不如无书大概也有这个道理吧^_^
实验2用机器指令和汇编指令编程
(1)使用DEBUG,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
movax,ffff
movds,ax
movax,2200
movss,ax
movsp,0100
movax,[0];ax=5BEAH
addax,[2];ax=5CCAH
movbx,[4];bx=31F0H
addbx,[6];bx=6122H
pushax;sp=00FEH,修改的内存单元地址是2200:
00FE内容为5CCAH
pushbx;sp=00FCH,修改的内存单元地址是2200:
00FC内容为6122H
popax;sp=00FCH,ax=6122H
popbx;sp=00FEH,bx=5CCAH
push[4];sp=00FEH,修改的内存单元地址是2200:
00FE内容为31F0
push[6];sp=00FCH,修改的内存单元地址是2200:
00FC内容为2F32
此实验答案不定,需根据每台机器的实际运行情况。
Microsoft(R)WindowsDOS
(C)CopyrightMicrosoftCorp1990-2001.
C:
\DOCUME~1\ADMINI~1>debug
-a
0C1C:
0100movax,ffff
0C1C:
0103movds,ax
0C1C:
0105movax,2200
0C1C:
0108movss,ax
0C1C:
010Amovsp,0100
0C1C:
010Dmovax,[0]
0C1C:
0110addax,[2]
0C1C:
0114movbx,[4]
0C1C:
0118addbx,[6]
0C1C:
011Cpushax
0C1C:
011Dpushbx
0C1C:
011Epopax
0C1C:
011Fpopbx
0C1C:
0120push[4]
0C1C:
0124push[6]
0C1C:
0128
-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0100NVUPEIPLNZNAPONC
0C1C:
0100B8FFFFMOVAX,FFFF
-t
AX=FFFFBX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1CES=0C1CSS=0C1CCS=0C1CIP=0103NVUPEIPLNZNAPONC
0C1C:
01038ED8MOVDS,AX
-t
AX=FFFFBX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=0C1CCS=0C1CIP=0105NVUPEIPLNZNAPONC
0C1C:
0105B80022MOVAX,2200
-t
AX=2200BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=0C1CCS=0C1CIP=0108NVUPEIPLNZNAPONC
0C1C:
01088ED0MOVSS,AX
-t
AX=2200BX=0000CX=0000DX=0000SP=0100BP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=010DNVUPEIPLNZNAPONC
0C1C:
010DA10000MOVAX,[0000]DS:
0000=5BEA
-dffff:
0f
FFFF:
0000EA5BE000F031322F-32352F303700FC59.[...12/25/07..Y
-t
AX=5BEABX=0000CX=0000DX=0000SP=0100BP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=0110NVUPEIPLNZNAPONC
0C1C:
011003060200ADDAX,[0002]DS:
0002=00E0
-t
AX=5CCABX=0000CX=0000DX=0000SP=0100BP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=0114NVUPEIPLNZNAPENC
0C1C:
01148B1E0400MOVBX,[0004]DS:
0004=31F0
-t
AX=5CCABX=31F0CX=0000DX=0000SP=0100BP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=0118NVUPEIPLNZNAPENC
0C1C:
0118031E0600ADDBX,[0006]DS:
0006=2F32
-t
AX=5CCABX=6122CX=0000DX=0000SP=0100BP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=011CNVUPEIPLNZNAPENC
0C1C:
011C50PUSHAX
-t
AX=5CCABX=6122CX=0000DX=0000SP=00FEBP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=011DNVUPEIPLNZNAPENC
0C1C:
011D53PUSHBX
-t
AX=5CCABX=6122CX=0000DX=0000SP=00FCBP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=011ENVUPEIPLNZNAPENC
0C1C:
011E58POPAX
-t
AX=6122BX=6122CX=0000DX=0000SP=00FEBP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=011FNVUPEIPLNZNAPENC
0C1C:
011F5BPOPBX
-t
AX=6122BX=5CCACX=0000DX=0000SP=0100BP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=0120NVUPEIPLNZNAPENC
0C1C:
0120FF360400PUSH[0004]DS:
0004=31F0
-t
AX=6122BX=5CCACX=0000DX=0000SP=00FEBP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=0124NVUPEIPLNZNAPENC
0C1C:
0124FF360600PUSH[0006]DS:
0006=2F32
-t
AX=6122BX=5CCACX=0000DX=0000SP=00FCBP=0000SI=0000DI=0000
DS=FFFFES=0C1CSS=2200CS=0C1CIP=0128NVUPEIPLNZNAPENC
0C1C:
012816PUSHSS
-q
实验2用机器指令和汇编指令编程
(2)仔细观察图3.19中的实验过程,然后分析:
为什么2000:
0~2000:
F中的内容会发生改变?
图3.19用Debug进行实验的示例
答:
因为在debug使用T等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以,你的栈里就有些不是你操作的数据了。
这个问题后面会学到,不过这里也要有个印象,因为如果是在中断过程中压栈是栈越界的话,在windows下的命令窗口会强制关闭的。
这个可能在你跟踪一些程序的时候会遇到,到时候有个思考方向。
实验3编程、编译、连接、跟踪
(1)将下面的程序保存为t1.asm文件,将其生成可执行文件t1.exe。
assumecs:
codesg
codesgsegment
movax,2000H
movss,ax
movsp,0
addsp,10
popax
popbx
pushax
pushbx
popax
popbx
movax,4c00h
int21H
codesgends
end
按书中所示,从DOS进入EDIT
完成后保存文件为t1.asm
退出EDIT,进行编译,连接
生成可执行文件t1.exe
实验3