检测点3.1:
*所有进制为16进制*
*为狗北特制。*
1.
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190918174155140.png)
mov ax,1
mov ds,ax
mov ax,[0000] ax=____(2662)<此处将“0001:0”处的字型数据传入ax,故应为2662>
mov ax,[0001] bx=____ (E626) <同上理>
mov ax,bx ax=____(E626) <将bx中数据传入ax>
mov ax,[0000] ax=____(2662)
mov bx,[0002] bx=____(D6E6)
add ax,bx ax=____(FD48) <将ax,bx中的数据相加再送入ax中>
add ax,[0004] ax=____(2ECC)
mov ax,0 ax=____(0)
mov al,[0002] ax=____(00E6) <将‘1:2’的字节单元传入到ax的低字节中>
mov bx,0 bx=____(0)
mov bl,[000c] bx=____(0026)
add al,bl ax=____(000c) <将al,bl相加后等于10c,溢出了,此处为字节运算,故ax中为000c>
2.
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190918180016269.png)![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190918180030798.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ltcHRfZ29mbHk=,size_16,color_FFFFFF,t_70)初始cs:ip=2000:0,于是,执行顺序是:
mov ax, 6622 <指令读取后:ip=3----指令执行后:ax=6622>
jmp 0ff0:0100<指令读取后:ip=8----指令执行后:cs=offo,ip=0100--cs:ip=1000:0>
mov ax,2000 <指令读取后:ip=103----指令执行后:ax=2000>
mov ds,ax <指令读取后:ip=105----指令执行后:ds=2000>
mov ax,[0008] <指令读取后:ip=108----指令执行后:ax=c389>
mov ax,[0002] <指令读取后:ip=10b----指令执行后:ax=EA66>
内存中的数据和程序没有任何区别,都是以二进制的形式存放,关键看如何识别,例如cs:ip指向的被cpu识别为指令,被ds:[adress]指向的被识别为数据。
检测点3.2
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190924172109201.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ltcHRfZ29mbHk=,size_16,color_FFFFFF,t_70)
mov ax,1000h
mov ds,ax
mov ss,1000h
mov sp,10h<此处将1000:0-1000:0f作为栈段;ss:sp应该指向栈顶,此时栈为空,指向栈最高地址的下一个地址单元。>
push [0]
push [2]
push [4]
push [6]
(2)补全下面的程序,使其可以将10000-10000f中的8个字,逆序复制到20000-2000f中
mov ax,2000h
mov ds,ax
mov ss,1000h
mov sp,0h<此处将2000:0-2000:f设为栈段,此时栈满,ss:sp应指向栈的最低地址即:2000:0>
实验二:用机器指令和汇编指令编程
(1)写入程序后,观察情况填空:mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax=___(c0ea)
add ax,[2] ;ax=___(c0fc)
mov bx,[4] ;bx=___(30f0)
add bx,[6] ;bx=___(6021)
push ax ;sp=___(00fe);修改的内存单元地址是2200:fe,内容为c0fc
push bx ;sp=___(00fc);修改的内存单元地址是2200:fc,内容为6021
pop ax ;sp=___(00fe);ax=___(6021)
pop bx ;sp=___(0100);ax=___(c0fc)
push [4] ;sp=___(00fe);修改的内存单元地址是2200:fe,内容为30f0
push [6] ;sp=___(00fe);修改的内存单元地址是2200:fc,内容为2f31
(2)观察实验过程,分析内容变化的原因?
如大多数初学者一样,此处我也不是太理解。但是,我观察内容改变后的部分发现,其与cs:ip内容一致。所以我推测是cpu在执行mov ss,ax指令时把cs:ip连同它所指向的内容覆盖了ss:sp中的内容;