汇编语言第二章学习笔记和测试题

1.8086有14个寄存器,都是16位的,其中ax,bx,cx,dx用来存放一般的数据,因此通常称作通用寄存器;
2.8086的16位寄存器可以分成两个8位的来使用;
3.1个8位寄存器所能存储的最大数据是255;
4.字节:Byte,一个字节由8bit组成;
字:word,一个字由两个字节组成;
5.关于二进制向十六进制的转换:一个16进制对应四个二进制的数,反过来四个二进制的数对应1个十六进制数;
6.mov ,add等操作对象应该一致,否则指令错误;
7.关于16位机的概念问题:运算一次可以处理16位的数据;
寄存器的最大宽度为16位;
寄存器和运算器之间的通路为16位。
8.8086cpu的寻址方式:物理地址=段地址+偏移地址;
仅用偏移地址最多可以寻址64k的内存单元;
9.8086有4个段寄存器:cs,ds,ss,es;
10.任意时刻,cpu将cs:ip指向的内容当作指令来执行;
11.8086 cpu执行过程,大体上可以分为3步:
1)从cs:ip指向的内存单元读取指令;
2)ip指向下一条将要执行的指令;
3)执行指令。
12.jmp ax :修改IP寄存器;
13.关于debug命令的使用,常用的有以下几个:
1)r命令查看改变寄存器的内容;
2)d命令查看内存中的内容;
3)e命令改写内存中内容;
4)t命令单步执行;
5)a命令以汇编格式在内存中写一条指令。

检测点2.1
mov ax,62627 ax=f4a3//先要将10进制换算成16进制
mov ah,31H ax=31a3
mov al,23H ax=3123
add ax,ax ax=6246
mov bx,826cH bx=826c
mov cx,ax cx=6246
mov ax,bx ax=826c
add ax,bx ax=04d8
mov al,bh ax=8282
mov ah,bl ax=6c82
add ah,ah ax=d882
add al,6 ax=d888
add al,al ax=d810 //进位丢失
mov ax,cx ax=6246
2)只能使用目前学过的指令,最多使用4条指令,编程计算2的4次方。
mov ax,2
add ax,ax
add ax,ax
add ax,ax

检测点2.2
1)给定段地址为0001H,仅仅通过变化偏移地址寻址,cpu的寻址范围00001H到10000.
//谢谢tomato的提醒,这个错误范的有点粗心,现在改正:
//给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。
2)有一个数据放在内存20000H单元中,现在给定段地址为SA,若想通过偏移地址寻到此单元,则SA应该满足的条件是:最小为1001H,最大为2000H。(当给定的段地址大于2000小于1000的时候,cpu无论怎么寻址都不会寻到此单元)。

检测点2.3
下面3条指令执行后,cpu几次修改IP,都是在什么时候?最后IP的值是多少?
mov ax,bx //第一次修改IP,先修改IP,后执行指令;
sub ax,ax //第二次修改IP;
jmp ax //第三次修改IP,然后指令执行之后再修改一次IP,由于IP寄存器的内容是ax寄存器的内容,所以cpu一共4次修改IP,最后IP=0,也就是IP寄存器的最后值是0.

你可能感兴趣的:(内存,十六进制,寄存器,测试题,cs)