汇编语言课后习题答案(王爽)

实验查看CPU和内存,用机器指令和汇编指令编程

  • 实验目的
  1. 了解什么是Debug以及Dosbox。
  2. 学习dosbox及dubug的基本用法
  3. 学会在dubug中使用汇编指令编写简单程序
  • 实验准备
  1. 复习第二章关于通用寄存器以及CS和IP的相关内容。
  2. 复习第二章8086给出物理地址的方法。
  3. 提前阅读和了解CPU的实模式、保护模式和虚拟模式三种工作模式的资料。
  • 实验内容及步骤

(一)预备知识:Debug的使用

1.什么是Debug?

Debug是DOS、Windows都提供的模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。

*关于详细介绍请大家自行查阅资料。

2.我们用到的Debug功能

R命令:查看和改变CPU寄存器的内容

D命令:查看内存中的内容

E:改写内存中的内容

U:将内存中的机器指令翻译成汇编指令

T命令:执行一条机器指令

A:以汇编指令的格式在内存中写入机器指令

3.进入Debug

Debug是在DOS方式下使用的程序。我们进入debug前,应先进入DOS方式。

  • 重新启动计算机,进入DOS方式,此时进入的是实模式DOS。
  • 在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。

*在64位的Windows中进入Debug,的方法如下:

①下载一个叫做Dosbox的软件,将其安装在D盘上的新建目录Dosbox下;

②运行Dosbox,使用mount命令将此目录挂载为为C盘:mount c d:\dosbox

  • 转至C盘:c:
  • 转至虚拟C盘下的MASM(因为debug.exe存放在d:\dosbox\masm中):

cd c:\masm

  • 运行debug:debug

4.用R命令查看和改变CPU的内容

观察AX、BX、CX、DX、CS和IP的值,尤其注意CS和IP的值及其含义

修改寄存器的值,比如:r ax,在使用R命令查看一下修改的结果。

也可以使用R命令修改CS和IP的值。

5.D命令查看内存中的内容

格式D 段地址:偏移地址,列出从指定内存单元开始的128个内存单元的内容。也可以使用“D 段地址:起始偏移地址  结尾偏移地址”来指定查看的范围。

以下分成三部分内容:

中间是从指定地址开始的128个内存单元的内容

左边是每行的起始地址

右边是每个内存单元中的数据对应的可显示的ASCII码字符。

6.E命令改写内存单元的内容

E命令以提问的方式来逐个地址地修改从某一地址开始的内存单元中的内容,一个单元修改完毕之后,按下空格键,即用输入的数据改写了当前的内存单元,全部修改完毕之后,按Enter键结束E命令。

7.用E命令向内存中写入机器码,用U命令查看内存中机器码的含义,用T命令执行内存中的机器码。

比如,我们要从内存1000:0单元开始写入这样一段机器码:

机器码      对应的汇编指令

B80100      mov ax,0001

B90200      mov cx,0002

01c8        add ax,cx

E 段地址:偏移地址 数值1  数值2  数值3 ……

U 段地址:偏移地址,U命令的显示输出分成了三部分:每一条机器指令的地址、机器指令、机器指令所对应的汇编指令。

T命令可以执行一条或者多条指令。简单地使用T命令,可以执行CS:IP指向的指令。

我们使用T命令来执行我们刚才写入的指令,此时我们应该让CS:IP指向1000:0处。使用R修改CS和IP的值,让CS=1000,IP=0,然后使用R命令查看当前各个寄存器的值,再使用T命令单步跟踪执行,观察各个寄存器的变化

8.用A命令以汇编指令的形式在内存中写入机器指令

可以看到,当我们使用A命令写入指令时,我们输入的是汇编指令,Debug将这些汇编指令翻译为对应的机器指令,将它们的机器码写入了内存。

9.退出Debug:Q命令

(二)自主实验任务

1.使用Debug,将下面的程序段写入内容,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。

2.将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。

Mov ax.1

Add ax,ax

Jmp 2000:0003

查看内存中的内容。

3.PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。如果对实验的结果感到疑惑,请复习第一章1.15节的内容。

4.向内存从B81100H开始的单元中填写数据,如:

-E B810:0000 01 01 02 02 03 03 04 04

请读者先填入不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。如果对实验的结果感到疑惑,请复习第一章1.15节的内容。

以上内存单元中地址其实是显存地址。

(三)拓展实验内容

考察ROM BIOS中关于检查版权通告和系列号的数据

计算机的版权通告是嵌入在ROM BIOS中的FE000H单元。

  • 实验要求:
  1. 将老师讲授的实验内容自己要演练一遍,深刻理解关于寄存器和指令执行的相关知识。
  2. 自行完成自主实验内容,并记录实验结果。
  3. 总结此次实验中用到的几个debug命令的详细用法。

实验二 用机器指令和汇编指令编程

  • 实验目的
  1. 学习debug中D、E、U、A命令更详细的用法
  2. 通过在Debug中跟踪指令的执行,更加深入地理解8086CPU的栈机制
  • 实验准备
  1. 复习关于寄存器CS和IP的相关内容。
  2. 复习第三章CPU的栈机制及其基本操作的详细内容。
  3. 复习上一个实验中关于R、D、E、A、U、T的基本用法。
  4. 提前准备好自主实验所用的指令及相关数据。
  • 实验内容及步骤

(一)预备知识:Debug的使用

1.关于D命令

D命令是由Debug执行的,Debug在执行“D:1000:0”这样的命令时,也会先将段地址1000H送入段寄存器中。在此,默认将段地址送入DS中。

另外,D命令也提供了一种符合CPU机理的格式:“D:段寄存器:偏移地址”,表示以段寄存器中的数据为段地址SA,列出从SA:偏移地址开始的内存区间中的数据。

比如:

 

2.在E、A、U命令中使用段寄存器

在E、A、U这些可以带有内存单元地址的命令中,也可以通D命令一样,用段寄存器表示内存单元的段地址。

比如:以机器码和汇编指令的形式,显示当前代码段中的代码。

3.下一条指令执行了吗?

在Debug中,用a命令写入一段程序:

Mov ax,2000

Mov ss,ax

Mov sp,10

Mov ax,3123

Push ax

Mov ax,3366

Push ax

观察并分析我们实验的结果,可以看到,在用T命令执行mov ss,ax的时候,它的下一条指令mov sp,10也紧接着执行了。

结论:debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。

为什么呢?涉及到后面要学习的一个重要内容:中断机制。

(二)自主实验任务

1.使用Debug,将下面的程序段写入内容,逐条执行,根据指令执行后的实际运行情况填空。

mov ax,ffff

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,[0]       ;ax=         

add ax,[2]        ;ax=         

mov bx,[4]       ;bx=         

add bx,[6]       ;bx=         

push ax         ;sp=        ,修改的内存单元地址是         内容为        

push bx         ;sp=        ,修改的内存单元地址是         内容为        

pop ax          ;sp=        ,ax=         

pop bx          ;sp=        ,bx=         

push [4]        ;sp=        ,修改的内存单元地址是          内容为         

push [6]            ;sp=        ,修改的内存单元地址是           内容为         

执行过程截图如下(不同的计算机结果不同):

  1. 仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:F中的内容会发生改变?

  • 实验要求
  1. 将老师讲授的实验内容自己要演练一遍,深刻理解8086CPU指令的执行过程。
  2. 自行完成自主实验内容,并记录实验结果。
  3. 对实验结果进行思考,写下自己从此次实验中发现的规律,写下自己的疑问,,以便在以后的课程中进行更一步的探索。

实验3 编程、编译、连接、跟踪

  • 实验目的
  1. 学会如何将一个汇编程序编译成可执行程序并运行。
  2. 通过实践深入理解可执行文件中的程序装入内存并运行的原理。
  3. 学会在dubug中跟踪程序的运行。
  • 实验准备
  1. 复习汇编指令、伪指令和标号的内容。
  2. 复习CPU执行指令的基本原理。
  3. 复习上一个实验中关于Debug中的D、E、U、A、T命令的用法。
  • 实验内容及步骤
  • 编程、编译、连接、跟踪

1.使用文本编辑器(如Edit、记事本等),用汇编语言编写汇编源程序。

程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中。

进入DOS方式,运行Edit,在其中编辑程序,如下图所示:

2.编译

进入DOS方式,进入 C:\masm 目录,运行masm.exe。

如果源程序文件不是以 asm 为扩展名的话,就要输入它的全名。比如p1.txt。

在输入源程序文件名的时候一定要指明它所在的路径。如果文件就在当前路径下,只输入文件名就可以。

3.连接

在对源程序进行编译得到目标文件后,我们需要对目标文件进行连接,从而得到可执行文件。

4.以更简洁的方式编译和连接

 

5.程序的执行

6.在Debug中跟踪程序的执行

首先用r命令查看各个寄存器的值

注意观察各个寄存器的值,仔细体会指令被装入内存并执行的原理。

用U命令查看当前CS和IP指向的指令都有哪些。

用用T命令单步执行程序中的每一条指令,并观察每条指令的执行结果,到了 int 21,我们要用P命令执行:

使用Q命令退出Debug,将返回到command中,因为Debug是由command加载运行的。

  • 自主实验内容

1.将下面的程序保存为t1.asm文件,将其生成可执行文件t1.exe。

Assume cs:codesg

Codesg segment

Mov ax,2000H

Mov ss,ax

Mov sp,0

Add sp,10

Pop ax

Pop bx

Push ax

Push bx

Pop ax

Pop bx

Mov ax,4c00H

Int 21H

2.用Debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。

3.PSP的头两个字节是CD20,用Debug加载t1.exe,查看PSP的内容。

  • 实验要求:
  1. 将老师讲授的实验内容自己要演练一遍,熟练掌握汇编程序从编辑、编译、连接到运行的过程,并在Debug中跟踪每一条指令的运行。
  2. 自行完成自主实验内容,并记录实验结果。
  3. 深入思考可执行程序装入内存并运行的原理并进行总结。

实验4 [Bx]和Loop的使用

  • 实验目的
  1. 学会使用LOOP指令和[BX]编写简单程序。
  2. 学会使用Loop指令访问连续内存的基本方法。
  3. 学会在dubug中跟踪含有Loop指令的程序的运行。
  • 实验准备
  1. Loop指令的格式及基本功能。
  2. 程序中使用[BX]的基本含义。
  • 实验内容及步骤
  • 在Debug中跟踪loop指令实现的循环程序
  1. 将以下程序编辑、编译、连接、运行,并在Debug中跟踪其执行过程。

将循环次数改为123次,再重新编译连接,并在debug中跟踪其运行。

Debug执行“g 0012”后,CS:0012前的程序段被执行,从各个相关的寄存器中的值,我们可以看出执行的结果:

遇到loop指令时,使用P命令来执行。Debug就会自动重复执行循环中的指令,直到(cx)=0为止。

  • 自主实验内容

1.编程,向内存0:200~0:23F依次传送数据0~63(3FH)

2.编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“mov,ax,4c00h”和“int 21h”。

3.下面的程序的功能是将“mov,ax,4c00h之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。

Assume cs:code

Code segment

Mov ax,      

Mov ds,ax

Mov ax,0020H

Mov es,ax

Mov bx,0

Mov cx,       

S:  Mov al,[bx]

Mov es:[bx],al

Inc bx

Loop s

Mov ax,4c00H

Int 21H

Code ends

end

提示

  1. 复制的是什么?从哪里到哪里?
  2. 复制的是什么?有多少个字节?你如何知道要复制的字节的数量?

提示:CX中存放的是当前程序中指令的字节总数量。在编程过程中,先给循环次数CX给任意值,执行程序,去观察程序的长度,得出实际要复制的字节数,然后再去修改源程序中CX的值,重新编译连接执行。

  • 实验要求:
  1. 将老师讲授的实验内容自己演练一遍,重点关注Loop指令的执行过程,以及对于CX寄存器的修改。
  2. 自行完成自主实验内容,并记录实验结果。

实验5 编写调试具有多个段的程序

  • 实验目的
  1. 学会将数据和栈放入代码段中的方法。
  2. 学会将数据、栈和代码放入不同段中的方法。
  3. 理解将数据和栈放置在不同位置时,各个段寄存的赋值情况及原理。
  • 实验准备
  1. 程序的编辑、编译、连接及在debug中跟踪运行的过程。
  2. 事先编写好本实验的相关程序。
  • 实验内容及步骤

1.将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

assume cs:code,ds:data,ss:stack

data segment

        dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

date ends

stack segment

        dw 0,0,0,0,0,0,0,0

stack ends

code segment

start:            mov ax, stack

                mov ss, ax

                mov sp, 16

                

                mov ax, data

                mov ds, ax

                

                push ds:[0]

                push ds:[2]

                pop ds:[2]

                pop ds:[0]

                

                mov ax, 4c00h

                int 21h

code ends

end start

  1. CPU执行程序,程序返回前,data段中的数据为多少?
    A: 23 01 56 04 89 07 bc 0a ef 0d ed 0f ba 0c 87 09
  2. CPU执行程序,程序返回前,CS=___,SS=___,DS=___。
  3. 设程序加载后,code段的段地址为X,则data段的段地址为___,stack段的段地址为___。

A: X-0002H, X-0001H

2.将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

assume cs:code,ds:data,ss:stack

data segment

        dw 0123h,0456h

date ends

stack segment

        dw 0,0

stack ends

code segment

start:            mov ax, stack

                mov ss, ax

                mov sp, 16

                

                mov ax, data

                mov ds, ax

                

                push ds:[0]

                push ds:[2]

                pop ds:[2]

                pop ds:[0]

                

                mov ax, 4c00h

                int 21h

code ends

end start

  1. CPU执行程序,程序返回前,data段中的数据为多少?

A: 23 01 56 04 00 00 00 00 00 00 00 00 00 00 00 00

  1. CPU执行程序,程序返回前,CS=___,SS=___,DS=___。

3.设程序加载后,code段的段地址为X,则data段的段地址为___,stack段的段地址为___。

A: X-0002H, X-0001H

4.对于如下定义的段

name segment

...

name ends

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为___字节。

A:(Int(N/16) + 1)*16

3. .将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

assume cs:code,ds:data,ss:stack

code segment

start:            mov ax, stack

                mov ss, ax

                mov sp, 16

                

                mov ax, data

                mov ds, ax

                

                push ds:[0]

                push ds:[2]

                pop ds:[2]

                pop ds:[0]

                

                mov ax, 4c00h

                int 21h

code ends

data segment

        dw 0123h,0456h

data ends

stack segment

        dw 0,0

stack ends

end start

  1. CPU执行程序,程序返回前,data段中的数据为多少?
    A: 23 01 56 04 00 00 00 00 00 00 00 00 00 00 00 00
    2.CPU执行程序,程序返回前,CS=___,SS=___,DS=___。
    A: CS = code, SS = stack, DS = data


3.设程序加载后,code段的段地址为X,则data段的段地址为___,stack段的段地址为___。
A:X+0003h, X+0004h

 

4.如果将(1),(2),(3)题中的最后一条伪指令"end start"改为"end"(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?请说明原因。

A:第三题即便将"end start"改为"end",依然能正确执行。

   因为start为程序入口,即程序开始执行的地方,如果没有注明入口, 则程序将从程序的开头开始执行,

   而第三题程序的开头即是指令,所以依然能正确执行。

5.程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中。

assume cs:code

dataA segment

        db 1,2,3,4,5,6,7,8

dataA ends

dataB segment

        db 1,2,3,4,5,6,7,8

dataB ends

dataC segment

        db 0,0,0,0,0,0,0,0

dataC ends

code segment

start:

?

Code ends

End start

编写程序段如下:

start:            mov ax, dataA

                mov ds, ax

                mov ax, dataB

                mov es, ax

                mov ax, dataC

                mov ss, ax

                mov bx, 0

                mov ax, 0

                

                mov cx, 8

        s:       mov al, [bx]

                add al, es:[bx]

                mov ss:[bx], al

                inc bx

                loop s

                

                mov ax,4c00h

                int 21h

6.程序如下,编写code段中的代码,用push指令将data段中的前8个字型数据,逆续存储到stack段中。

assume cs:code

data segment

        dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

data ends

stack segment

        dw 0,0,0,0,0,0,0,0

stack ends

code segment

start:

?

Code ends

End start

编写程序段如下:

start:        mov ax, data

                mov ds, ax

                mov ax, stack

                mov ss, ax

                mov sp, 16

                

                mov bx, 0

                mov cx, 8

        s:        push [bx]

                add bx, 2

                loop s

                

                mov ax, 4c00h

                int 21h

第1章 基础知识 1.1 机器语言 1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储器的读写 1.8 地址总线 1.9 数据总线 1.10 控制总线 1.11 内存地址空间(概述) 1.12 主板 1.13 接口卡 1.14 各类存储器芯片 1.15 内存地址空间 第2章 寄存器 2.1通用寄存器 2.2字在寄存器中的存储 2.3几条汇编指令 2.4物理地址 2.516位结构的CPU 2.68086CPU给出物理地址的方法 2.7“段地址×16+偏移地址=物理地址” 的本质含义 2.8段的概念 2.9段寄存器 2.10CS和IP 2.11修改CS、IP的指令 2.12代码段 实验1查看CPU和内存,用机器指令 和汇编指令编程 第3章寄存器(内存访问) 3.1内存中字的存储 3.2DS和(address) 3.3字的传送 3.4mov、add、sub指令 3.5数据段 3.6栈 3.7CPU提供的栈机制 3.8栈顶超界的问题 3.9push、pop指令 3.10栈段 实验2用机器指令和汇编指令编程 第4章第一个程序 4.1一个源程序从写出到执行的过程 4.2源程序 4.3编辑源程序 4.4编译 4.5连接 4.6以简化的方式进行编译和连接 4.71.exe的执行 4.8谁将可执行文件中的程序装载进入 内存并使它运行? 4.9程序执行过程的跟踪 实验3编程、编译、连接、跟踪 第5章(BX)和loop指令 5.1(BX) 5.2Loop指令 5.3在Debug中跟踪用loop指令实现的 循环程序 5.4Debug和汇编编译器masm对指令的 不同处理 5.5loop和(bx)的联合应用 5.6段前缀 5.7一段安全的空间 5.8段前缀的使用 实验4(bx)和loop的使用 第6章 包含多个段的程序 6.1在代码段中使用数据 6.2在代码段中使用栈 6.3将数据、代码、栈放入不同的段 实验5编写、调试具有多个段的程序 第7章更灵活的定位内存地址的 方法 7.1anol和or指令 7.2关于ASCII码 7.3以字符形式给出的数据 7.4大小写转换的问题 7.5(bx+idata) 7.6用(bx+idata)的方式进行数组的 处理 7.7SI和DI 7.8(bx+si)和(bx+di) 7.9(bx+si+idata)和(bx+di+idata) 7.10不同的寻址方式的灵活应用 实验6实践课程中的程序 第8章数据处理的两个基本问题 8.1bx、si、di和bp 8.2机器指令处理的数据在什么地方 8.3汇编语言中数据位置的表达 8.4寻址方式 8.5指令要处理的数据有多长 8.6寻址方式的综合应用 8.7div指令 8.8伪指令dd 8.9dup 实验7寻址方式在结构化数据访问中的 应用 第9章转移指令的原理 9.1操作符offset 9.2jmp指令 9.3依据位移进行转移的jmp指令 9.4转移的目的地址在指令中的jmp 指令 9.5转移地址在寄存器中的jmp指令 9.6转移地址在内存中的jmp指令 9.7jcxz指令 9.8loop指令 9.9根据位移进行转移的意义 9.10编译器对转移位移超界的检测 实验8分析一个奇怪的程序 实验9根据材料编程 第10章CALL和RET指令 10.1ret和retf 10.2call指令 10.3依据位移进行转移的call指令 10.4转移的目的地址在指令中的call 指令 10.5转移地址在寄存器中的call指令 10.6转移地址在内存中的call指令 10.7call和ret的配合使用 10.8mul指令 10.9模块化程序设计 10.10参数和结果传递的问题 10.11批量数据的传递 10.12寄存器冲突的问题 实验10编写子程序 课程设计1 第11章标志寄存器 11.1ZF标志 11.2PF标志 11.3SF标志 11.4CF标志 11.5OF标志 11.6adc指令 11.7sbb指令 11.8cmp指令 11.9检测比较结果的条件转移指令 11.10DF标志和串传送指令 11.11pushf和popf 11.12标志寄存器在Debug中的表示 实验11编写子程序 第12章内中断 12.1内中断的产生 12.2中断处理程序 12.3中断向量表 12.4中断过程 12.5中断处理程序和iret指令 12.6除法错误中断的处理 12.7编程处理0号中断 12.8安装 12.9do0 12.10设置中断向量 12.11单步中断 12.12响应中断的特殊情况 实验12编写0号中断的处理程序 第13章int指令 13.1int指令 13.2编写供应用程序调用的 中断例程 13.3对int、iret和栈的深入理解 13.4BIOS和DOS所提供的 中断例程 13.5BIOS和DOS中断例程的 安装过程 13.6BIOS中断例程应用 13.7DOS中断例程应用 实验13编写、应用中断例程 第14章端口 14.1端口的读写 14.2CMOS RAM芯片 14.3shl和shr指令 14.4CMOS RAM中存储的时间信息 实验14访问CMOS RAM 第15章外中断 15.1接口芯片和端口 15.2外中断信息 15.3PC机键盘的处理过程 15.4编写int 9中断例程 15.5安装新的int 9中断例程 实验15安装新的int 9中断例程 第16章直接定址表 16.1描述了单元长度的标号 16.2在其他段中使用数据标号 16_3直接定址表 16.4程序入口地址的直接定址表 实验16编写包含多个功能子程序的 中断例程 第17章使用BIOS进行键盘输入 和磁盘读写 17.1int 9中断例程对键盘输入的处理 17.2使用int 16h中断例程读取 键盘缓冲区 17.3字符串的输入 17.4应用int 13h中断例程对磁盘 进行读写 实验17编写包含多个功能子程序的 中断例程 课程设计2 综合研究 研究试验1搭建一个精简的C语言 开发环境 研究试验2使用寄存器 研究试验3使用内存空间 研究试验4不用main函数编程 研究试验5函数如何接收不定数量的 参数 附注 附注1Intel系列微处理器的3种工作 模式 附注2补码 附注3汇编编译器(masm.exe)对jmp的 相关处理 附注4用栈传递参数 附注5公式证明
检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。 (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。 (3)1KB的存储器可以存储 8192(2^13) 个bit, 1024个Byte。 (4)1GB是 1073741824 (2^30) 个Byte、1MB是 1048576(2^20) 个Byte、1KB是 1024(2^10)个Byte。 (5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: 64 (KB)、 1 (MB)、 16 (MB)、 4 (GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为: 1 (B)、 1 (B)、 2 (B)、 2 (B)、 4 (B)。 (7)从内存中读取1024字节的数据,8086至少要读 512 次,80386至少要读 256 次。 (8)在存储器中,数据和程序以 二进制 形式存放。 解题过程: (1)1KB=1024B,8KB=1024B*8=2^N,N=13。 (2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。 (3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。 (4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。 (5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。 (6)8根数据总线一次可以传送8位二进制数据(即一个字节)。 (7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。 (8)在存储器中指令和数据没有任何区别,都是二进制信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值