#pragma once
/* 7-寄存器(CPU工作原理)02
字在寄存器中的存储
一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。 字 暂用 2个字节 也就是 字 == 2 Byte , 字的英文是WORD 1 WORD == 2 Byte == 16bit ,WORD 是
16位 为一个单位的.
关于数制的讨论
由于一个内存单元可以存放 8位数据,CPU中的寄存器又可存放 n 个 8位数据。也就是说,计算机中的数据大多是由1~N个8位数据构成的。用十六进制来表示数据可以直观的看出这个数据是由哪些8位数据构成的。每两位对应一个
八进制!
几条汇编指令
汇编指令不区分大小写!!!!
汇编指令 操控CPU完成的操作 用高级语言的语法描素
mov ax,78 将78送入ax ax = 78
mov ah,78 将78送入ah ah = 78
add ax,8 将寄存器ax中的数值加上8 ax = ax + 8
mov ax,bx 将寄存器bx中的数据送入寄存器ax ax = bx
add ax,bx 将ax,bx中的内容相加,结果存放在ax中 ax = ax+bx
CPU执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。当16位的寄存器要存储一个超过16位的数据时候,高位15位以上的数据会被抛弃,也就是从第16位开始的数据被丢到了.1044C 如果放在ax寄存器中就是 044C,但
是计算机不是真的把 1044C 的1 给抛弃了而是放到了别的地方,以后的课程会进行解释,而ax 中只能存放 044C 了.
当16位寄存器的8位寄存器单独拿出来计算的时候,并且最后要存储的值超出了8位的大小,那么也和上面一样,多出去的高位被丢掉了.只保留能存放的数据.例如 AX 16位寄存器有两个 8位寄存器,一个是高位 AH,一个是低位AL 寄存
器,当我们把AX 16位寄存器分开来分拨用AH和AL来表示的时候,这个时候AH 或者AL 就是独立的8位寄存器了,使用他们也应该独立的去计算,虽然它们改变会影响AX 16位寄存器的值,但是也是独立的.
这里的丢失,指的是进位制不能在 8 位寄存器中保存,但是 CPU 不是并真的不丢弃 这个进位值,这个问题会在后面的课程中讨论。
检测点:
(1)写出每条汇编指令执行后相关寄存器中的值 , 答案我就直接给出了,如果自己有心练习把答案扣掉就行了.
mov ax,62627 ax == F4A3H == 62627 要知道,在寄存器中的值都是显示十六进制的所以,我们要用十六进制展示
mov ah,31H ax == 31A3H
mov al,23H ax == 3123H
add ax,ax ax == 6246H
mov bx,826CH bx == 826CH
mov cx,ax cx == 6246H
mov ax,bx ax == 826CH
add ax,bx ax == 04D8H
mov al,bh ax == 0482H
mov ah,bl ax == 6C82H
add ah,ah ax == D882H
add al,6 ax == D888H
add al,al ax == D810H
mov ax,cx ax == 6246H
(2)只能使用目前学过的汇编指令,最多使用四条指令,编程计算2的4次方。
mov ax,2
add ax,ax
add ax,ax
add ax,ax 因为是2的4次方,所以每次都是乘2 ,乘2 就等于 ax = ax + ax
*/