《汇编语言》——王爽

第1章 基础知识

汇编语言是直接在硬件之上工作的编程语言。

PC机及CPU物理结构和编程结构的全面研究——《微机原理与接口》

计算机的一般结构、功能、性能的研究——《计算机组成原理》

如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作——《汇编语言》

1.1机器语言

机器语言是机器指令的集合。本质是一列二级制数字,计算机将之转变为一列高低电平,驱动计算机的电子器件,进行运算。

计算机是指由CPU和其他受CPU直接或间接控制的芯片、器件、设备组成的计算机系统。如:PC机。

每一种微处理器,(由于硬件设计和内部结构的不同,就需要不同的电平脉冲来控制、工作)都有自己的机器指令集,即机器语言。

书写和阅读机器码程序困难–>汇编语言

1.2汇编语言的产生

汇编语言的主体是汇编指令

过程:程序员用汇编语言写出源程序,再用汇编编译器将其编译为机器码,有计算机最终执行。

1.3汇编语言的组成

汇编语言由3类指令组成:

  1. 汇编指令(核心):机器码的助记符,有对应的机器码。
  2. 伪指令:无对应机器码,由编译器执行,计算机不执行。
  3. 其他符号:无对应机器码,由编译器识别,如:+、-、*、/ 等。

1.4存储器

CPU内存的关系:要想让CPU工作,必须向它提供存储在内存中的指令和数据。

硬盘内存的关系:硬盘中的数据或指令,必须读到内存中,才能被CPU调用。

CPU如何向内存中读写信息呢?

1.5指令和数据

指令数据,在内存或硬盘上都是二进制信息。

CPU有时把信息看做指令,有时看做数据。

举例:

10001001110110000
89D8H#数据
mov ax,bx#指令

1.6存储单元

存储器被划分成若干存储单元,从0开始顺序编号。

一个存储单元的存储信息量

  • 单位:位(计算机存储信息的最小单位;bit)、字节(微型存储器容量的最小单位,Byte),1Byte = 8bit

  • 微型计算机存储器的存储单元可以存储一个Byte(字节),即8个bit(二进制位)。

  • 单位换算:1KB=1024B 、1MB=1024KB 1GB=1024B 1TB=1024GB

1.7 CPU对内存的读写

问题1:CPU如何对内存进行读写操作?

CPU要想进行数据的读写,必须和外部器件(芯片)进行3类信息的交互:

  1. 存储单元的地址(地址信息);
  2. 器件的选择,读或写的命令(控制信息);
  3. 读或写的数据(数据信息)。

问题2:CPU通过什么将地址、数据和控制信息传到存储器芯片中的呢?

电子计算机能处理、传输的信息都是电信号,电信号当然要用导线传送。计算机中专门连接CPU和其他芯片的导线,通常称为总线。总线,根据传送信息的不同,从逻辑上分为:地址总线、数据总线、控制总线。

问题3:如何命令计算机进行数据的读写呢?

要让计算机或微处理器工作,应向它输入能够驱动它进行工作的电平信息(机器码)。

读操作过程示意图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XZTQUVO2-1612361269413)(F:%5CIT_STUDY%5CBlogs%5Cimg%5C1612096604367.png)]

1.8地址总线

作用:CPU通过地址总线来指定存储单元。

一个CPU有N根地址总线,则可以说地址总线宽度为N,寻址空间:2^N

1.9数据总线

作用:CPU与内存或其他器件之间的数据传送通过数据总线进行。

数据总线的宽度决定了CPU和外界的数据传送速度。 N根数据总线一次传送一个N/8B的数据。

1.10控制总线

作用:CPU对外部器件的控制是通过控制总线来进行的。

控制线是一群不同控制线的集合,控制总线的宽度决定了CPU对外部器件的控制能力。

1.11内存地址空间(概述)

1.12主板

每个PC机都有一个主板。

主板有一些核心器件和一些主要器件,这些器件通过总线相连。

器件:CPU、存储器、外围芯片组、扩展插槽(一般插有RAM内存条和各类接口卡)等

1.13接口卡

网卡、显卡、声卡

CPU对外部设备不能直接控制,如:显示器、音箱、打印机等。->接口卡

CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。

1.14各类存储器芯片

读写属性分类:

  • 随机存储器(RAM):带电存储,可读可写,关机丢失

  • 只读存储器(ROM):只读不写,断电不丢失

1.15内存地址空间

存储器都和总线相连

CPU对他们进行读写时,都通过控制线发出内存读写命令

所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器,即内存地址空间

内存地址空间的大小受CPU地址总线宽度的限制。

第2章 寄存器

对CPU内部构造的理解:一个CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。

  • 运算器,进行信息处理
  • 寄存器,进行信息存储
  • 控制器,控制各种器件进行工作
  • 内部总线,连接各种器件,在他们之间进行内部传送

区分:内部总线与外部总线

  • 内部总线,实现CPU内部各个器件的联系
  • 外部总线,实现CPU和主板上其他器件的联系

不同的CPU,寄存器的个数、结构是不相同的。8086CPU有14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW

2.1通用寄存器

概念?

8086CPU的所有寄存器都是16位的,可以存放两个字节。AX,BX,CX,DX,这四个寄存器通常用来存放一般性的数据,被称为通用寄存器。

8086CPU的通用寄存器都可分为两个独立使用的8位寄存器来用。AX的低八位构成AL寄存器,高8位构成了AH寄存器。

一个16位寄存器所能存储的数据的最大值为多少?2^16-1

2.2字在寄存器中的存储

字:word,一个字由两个字节组成,高位字节和低位字节。

2.3几条汇编指令

mov ax,18
mov ah,78
add ax,8
mov ax,bx
add ax,bx

注意:八位寄存器的进位丢失问题

2.4 物理地址

CPU访问内存时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,即物理地址。

CPU通过地址总线送入存储器,必须是一个内存单元的物理地址。

不同的CPU可以有不同的形成物理地址的方法。

2.5 16位结构的CPU

16到底指什么呢?

  • 运算器一次最多可以处理16位的数据
  • 寄存器的最大宽度为16位

2.6 8086给出物理地址的方法

2.7“段地址*16+偏移地址=物理地址”的本质含义

2.8段的概念

2.9段寄存器

2.10CS和IP

2.11修改CS和IP的指令

2.12代码段

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

第3章 寄存器(内存访问)

第4章 第一个程序

第5章 [BX]和loop指令

1.[bx]和内存单元的描述

内存信息:①内存单元的地址;②内存单元的长度;

[0]:段地址在ds中,偏移地址为0

[bx]:偏移地址在寄存器中

2.loop指令和循环

3.描述性符号()

4.idata表示常量

5.1[BX]

mov ax,[bx]
mov [bx],ax

5.2 loop指令

loop实现循环,cx存放循环次数

;计算2^12
assume cs:code
code segmentmov ax,2mov cx,11;尽量减少循环次数
s:  add ax,axloop smov ax,4c00hint 21h
code endsend

5.3在debug中跟踪用loop指令实现的循环程序

;将ffff:0006中的数据存入dx中
assume cs:code
code segmentmov ax,0ffffh   ;汇编源程序中,数据不能以字母开头mov ds,axmov bx,6    ;ffff:0006mov al,[bx]mov ah,0    ;将内存单元中的数据,存入ax中mov dx,0mov cx,3
s:  add dx,axloop s  ;累加mov ax,4c00hint 21h
code ends
end

g指令:一次执行完标号s前的指令

p指令:自动执行loop

5.4debug和汇编masm编译器对指令的不同

debug中:

mov al,[0]
;al中存放ds:[0]数据

masm中:

mov al,0
mov al,[0]
;等价

masm中正确写法:

mov ax,2000h
mov al,ds:[0]
mov al,ds:[bx]
mov al,[bx]

5.5 loop和[bx]的联合应用

用同一种方法处理地址连续的内存单元的问题:

;ffff:0 ~ffff:b单元的数据:EA C0 12 00 F0 30 31 2F 30 31 2F 39
;和为:dx:0405h
assume cs:code
code segmentmov ax,0ffffhmov ds,axmov bx,0mov dx,0mov cx,12s:  mov al,[bx]mov ah,0add dx,axinc bxloop smov ax,4c00hint 21h
code ends
end

分析问题的流程:

  1. 寄存器是否可以计算存储结果?(结果越界)
  2. 运算时存储单位是否对应?(类型匹配)
  3. 如何实现计算?

注意点:

  1. 段寄存器不能直接赋值
mov ds,0;False
  1. 偏移地址在内存单元[x]
mov al,[0];写法不恰当

5.6段前缀

可以在访问内存单元的指令中显式地给出内存单元的段地址所在的段寄存器:

mov ax,ds:[bx]
mov ax,ss:[0]

段前缀:这些出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的:ds:、 cs:、 ss: 、es: 标识符号

5.7一段安全的空间

;引起死机
assume cs:code
code segmentmov ax,0mov ds,axmov ds:[26h],axmov ax,4c00hint 21h
code ends
end

实模式和保护模式:

在纯DOS方式(实模式)下,可以不理会dos,直接用汇编语言去操作真实的硬件,因为运行在CPU实模式下的DOS,没有能力对硬件系统进行全面、严格地管理。

但在Windows 2000、Unix这些运行与CPU保护模式下的操作系统中,不理会操作系统,用汇编语言去操作真实的硬件,是根本不可能的。硬件已被这些操作系统利用CPU保护模式所提供的功能全面而严格地管理了。

安全空间:0:200~0:2ff的256个字节的空间,不存放系统或其他程序的数据或代码。

5.8段前缀的使用

;将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中
;ffff:0 ~ffff:b单元的数据:EA C0 12 00 F0 30 31 2F 30 31 2F 39
;0020:0 ~0020:b单元的数据:EA C0 12 00 F0 30 31 2F 30 31 2F 39
assume cs:code
code segmentmov cx,12   mov bx,0s:  mov ax,0ffffhmov ds,axmov dl,[bx]mov ax,0020hmov ds,axmov [bx],dlinc bxloop smov ax,4c00hint 21h
code ends
end

引用两个段寄存器(ds、es),减少重复设置段寄存器地址运算:

assume cs:code
code segmentmov ax,0ffffhmov ds,axmov ax,0020hmov es,axmov bx,0mov cx,12
s:  mov dl,[bx];默认dsmov es:[bx],dlinc bxloop smov ax,4c00hint 21h
code ends
end

实验4 [bx]和loop的使用

;(1)向内存0:200~0:023f依次传送数据0~63(3fh)
assume cs:code
code segmentmov ax,0020hmov ds,axmov bx,0mov cx,64
s:  mov [bx],bxinc bxloop smov ax,4c00hint 21h
code ends
end

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D84Y0iq0-1612361269417)(F:%5CIT_STUDY%5CBlogs%5Cimg%5C1612191134839.png)]

第6章 包含多个段的程序

程序取得空间的方法:

  1. 在加载程序的时候为程序分配
  2. 在程序执行的时候向系统申请

6.1在代码段中使用数据

如何将数据存储在一组地址连续的内存单元中呢?到哪里去找这段内存空间呢?

;计算0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h的和,结果保存在ax中
assume cs:code
code segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  ;定义字型数据,数据在代码段的最开始,大小16字节mov bx,0mov ax,0mov cx,8
s:  add ax,cs:[bx]add bx,2loop smov ax,4c00hint 21h
code ends
end

-u之后:

cs:0 ~f 中为dw的8个16位的数据;

程序的运行,ip:10h,从而使cs:ip指向程序的第一条指令。

根据什么设置CPU的cs:ip指向程序的第一条要执行的指令?

  • 汇编程序在经过汇编编译器编译后会形成可执行文件;
  • 可执行文件由源程序和描述信息组成;
  • end start 描述了程序的结束和程序的入口,程序的入口被转化为一个入口地址,储存在可执行文件的描述信息中;
  • 当程序被程序加载到内存中之后,加载者从程序的描述信息中读到程序的入口地址,设置cs:ip,这样CPU就从我们希望的地址处开始执行。
;程序框架
assume cs:code
code segment……数据
start: ……code ends
end start

6.2在代码段中使用栈

;将程序中定义的数据逆置
assume cs:code
code segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  ;定义字型数据,数据在代码段的最开始,大小16字节dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0  ;为什么一定呀开辟32字节的内存空间?
start:  mov ax,csmov ss,axmov sp,30hmov bx,0mov cx,8s:  push cs:[bx]add bx,2loop smov bx,0mov cx,8s0: pop cs:[bx]add bx,2loop s0mov ax,4c00hint 21h
code ends
end start

6.3将数据、代码、栈放入不同的栈中

一个段的容量不得大于64kb,8086CPU模式限制

考虑用多个段,来存取数据、代码和栈:

段名就相当于有个标号,它代表了段地址

assume cs:code,ds:data,ss:stack
data segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  ;定义字型数据,数据在代码段的最开始,大小16字节
data ends
stack segmentdw 0,0,0,0,0,0,0,0
stack ends
code segment
start:  mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21h
code ends
end start

实验验证了data段、stack段、code段,地址的关系:

x,x+1,,x+2

;实验5-(5):将a段与b段中的数据相加,结果存入c段
assume cs:code
a segmentdb 1,2,3,4,5,6,7,8
a endsb segmentdb 1,2,3,4,5,6,7,8
b endsc segmentdb 0,0,0,0,0,0,0,0
c ends
code segment
start:  mov ax,amov ds,axmov ax,cmov es,axmov bx,0mov cx,8s:  mov al,[bx]mov es:[bx],al; mov es:[bx],[bx]  ;这种写法不正确inc bxloop smov ax,bmov ds,axmov bx,0mov cx,8s0: mov  al,[bx]add es:[bx],alinc bxloop s0mov ax,4c00hint 21h
code ends
end start
;实验5-(6):将a段中的前8个字型数据,逆置入b段中
assume cs:code
a segmentdw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segmentdw 0,0,0,0,0,0,0,0
b ends
code segment
start:  mov ax,bmov ss,axmov sp,10hmov ax,amov ds,axmov bx,0mov cx,8s:  push [bx]add bx,2loop smov ax,4c00hint 21h
code ends
end start

第7章 更灵活的定位内存地址的方法

定位内存单元地址的方法:

  • [0]
  • [bx]

7.1 and和or指令

  1. and指令:逻辑与指令

    作用:将操作对象的相应位设置为0,其他位不变

    mov al,01100011B
    将第6位设置为0
    add al,11011111B
    
  2. or指令:逻辑或指令

    作用:将操作对象的相应位设置为1,其他位不变

mov al,01100011B
将第6位设置为1
or  al,00100000B

7.2关于ASCII码

(1)计算机的二进制信息的表示?
答:计算机对信息进行编码,再解码。只要规则相同,人可以理解的信息就可以存入计算机中,再从计算机中取出。

(2)文本编辑过程——键盘输入a,在屏幕上显示得我过程?

答:

  1. 键盘按下‘a’键,按键信息被送入计算机中,计算机采用ASCII码规则对信息进行编码,将其转化为61H存储在内存的指定空间中;
  2. 文本编辑软件从内存中取出61H,将其送到显卡的显存中;
  3. 工作在文本模式下的显卡,用ASCII码的规则,解释显存中的内容。

7.3 以字符形式给出的数据

汇编程序中,’……'指明数据以字符形式给出的,编译器将把他们转化为相对应的ASCII码

;汇编程序的字符操作
assume cs:code,ds:data
data segmentdb 'unIX'db  'foRK'
data ends
code segment
start:  mov al,'a'mov bl,'b'mov ax,4c00hint 21h
code ends
end start

7.4大小写转换问题

A:65d 01000001

a:97d 01100001

and: 11011111

结果: 01000001

assume cs:codesg,ds:datasg
datasg segmentdb 'BaSiC'  ;转小写db 'iNfOrMaTiOn'    ;转大写
datasg ends
codesg segment
start:  mov ax,datasgmov ds,axmov bx,0mov cx,5s:  mov al,[bx]; 如果(al)>61H,则为小写字母的ASCII码,则:sub al,20Hand al,11011111b    ;小写变大写mov [bx],alinc bxloop s  mov bx,5mov cx,11s0:  mov al,[bx]or al,00100000bmov [bx],alinc bxloop s0mov ax,4c00hint 21h
codesg ends
end start

7.5\6 用[bx+idata]的方式进行数组的处理

assume cs:codesg,ds:datasg
datasg segmentdb 'BaSiC'db 'MinIX'
datasg ends
codesg segment
start:  mov ax,datasgmov ds,datasgmov bx,0mov cx,5s:  mov al,[bx]add al,11011111bmov [bx],almov al,[bx+5]mov al,5[bx]or al,00100000bmov [bx+5],alloop smov ax,4c00hint 21h
codesg ends
end start
#include<stdio.h>
int main(){char a[5] = "BaSiC";char b[5] = "MinIX";int i = 0;do{a[i] = a[i] & 0xDF;b[i] = b[i] | 0x20;i++;} while (i < 5);printf("%s %s\n",a,b);getchar();return 0;
}

7.7 SI和DI(bx)

SI和DI是8086CPU中和bx功能相近的寄存器,且不能够分成两个8位寄存器来用

将 welcome to masm! 复制到datasg:10h~1fh

assume cs:codesg,ds:datasg
datasg segmentdb 'welcome to masm!';16位db '................'
datasg ends
codesg segment
start:  mov ax,datasgmov ds,axmov bx,0mov cx,8s:  mov ax,[bx]mov [bx+16],ax; inc bxadd bx,2loop smov ax,4c00hint 21h
codesg ends
end start
assume cs:codesg,ds:datasg
datasg segmentdb 'welcome to masm!';16位db '................'
datasg ends
codesg segment
start:  mov ax,datasgmov ds,axmov si,0    ;用ds:si指向要复制的字符串mov di,16   ;用ds:di指向复制的目的空间mov cx,8s:  mov ax,[si] ;用16位寄存器进行内存单元的数据传送,一次复制2个字节,共复制8次mov [di],axadd si,2add di,2loop smov ax,4c00hint 21h
codesg ends
end start

7.8 [bx+si]和[bx+di]

[si] [bx]

7.9 [bx+si+idata]和[bx+di+idata]

200 [bx] [si]

[bx] [si].200

7.10不同的寻址方式的灵活运用

深入理解下列几种寻址方式:

[idata]
[bx]
[bx+idata]
[bx+si]
[bx+si+idata]

[bx+idata]:

; 将每一个单词的头一个字母改成大写字母
assume cs:codesg,ds:datasg
datasg segmentdb '1. file          'db '2. edit          'db '3. search        'db '4. view          'db '5. options       'db '6. help          '
datasg ends
codesg segment
start:  mov ax,datasgmov ds,axmov bx,0mov cx,6s:  mov al,[3+bx]and al,11011111bmov [3+bx],aladd bx,10hloop smov ax,4c00hint 21h
codesg ends
end start

[bx+si]:

; 将每一个单词的头一个字母改成大写字母
assume cs:codesg,ds:datasg
datasg segmentdb 'ibm             'db 'dec             'db 'dos             'db 'vax             '
datasg ends
codesg segment
start:  mov ax,datasgmov ds,axmov bx,0mov cx,4    ;设置外层循环计数值s:  mov dx,cxmov si,0mov cx,3    ;内层循环的次数s0: mov al,[bx+si]and al,11011111bmov [bx+si],alinc siloop s0add bx,16mov cx,dx   ;用dx存储的外围循环的计数值恢复cxloop smov ax,4c00hint 21h
codesg ends
end start; 将每一个单词的头一个字母改成大写字母dx
assume cs:codesg,ds:datasg
datasg segmentdb 'ibm             'db 'dec             'db 'dos             'db 'vax             'dw 0
datasg ends
codesg segment
start:  mov ax,datasgmov ds,axmov bx,0mov cx,4    ;设置外层循环计数值s:  mov ds:[40h],cxmov si,0mov cx,3    ;内层循环的次数s0: mov al,[bx+si]and al,11011111bmov [bx+si],alinc siloop s0add bx,16mov cx,ds:[40h]   ;用datasg:40h单元的值恢复cxloop smov ax,4c00hint 21h
codesg ends
end start; 使用栈来暂时存储数据
assume cs:codesg,ds:datasg,ss:stacksg
datasg segmentdb 'ibm             'db 'dec             'db 'dos             'db 'vax             '
datasg ends
stacksg segmentdw 0,0,0,0,0,0,0,0
stacksg ends
codesg segment
start:  mov ax,stacksgmov ss,axmov sp,16   ;栈段mov ax,datasgmov ds,axmov bx,0mov cx,4    ;设置外层循环计数值s0: push cxmov si,0mov cx,3s:  mov al,[bx+si]and al,11011111bmov [bx+si],alinc siloop sadd bx,16pop cxloop s0mov ax,4c00hint 21h
codesg ends
end start

[bx+si+idata]:

; 将每一个单词的前4个字母改成大写字母
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segmentdw 0,0,0,0,0,0,0,0
stacksg ends
datasg segmentdb '1. display      'db '2. brows        'db '3. replace      'db '4. modify       '
datasg ends
codesg segment
start:  mov ax,stacksgmov ss,axmov sp,16mov ax,datasgmov ds,axmov bx,0mov cx,4s:  push cxmov si,0mov cx,4s0: mov al,[bx+si+3]and al,11011111bmov [bx+si+3],alinc siloop s0add bx,16pop cxloop smov ax,4c00hint 21h
codesg ends
end start

本章实践内容较多:

  • 寻址方式的灵活运用—用更合理的结构来看待要处理的数据
  • 二重循环:外层循环cx的保存和恢复:dx、dw、stack的方式
  • 栈的应用:保存临时数据
  • 大小写转换的方法:and al,111x(0)0000b(小写变大写/X-32)、or al,000x(1)1111b(大写转小写/X+32)

第8章 数据处理的两个基本问题


更新中……

《汇编语言》——王爽相关推荐

  1. 汇编语言 王爽第二版 总结

    汇编语言 王爽第二版 总结,所以内容都是8086的 summary asssembly ,汇编总结 why: 最初始的编程语言就是使用打孔机,打出来的0 1 代码,然后把卡片插入到电脑中运行然后 看输 ...

  2. 汇编语言——王爽版 总结

    汇编语言-王爽summary<考试复习版> 摆烂一学期,期末抱佛脚 只针对必要内容总结,并非按目录总结 文章目录 汇编语言-王爽summary<考试复习版> `只针对必要内容总 ...

  3. 【汇编语言 王爽】实验14代码

    实验需求如下: 编程,以"年/月/日 时:分:秒"的格式显示时间 注意:CMOS RAM中储存着系统的配置信息,除了保存时间信息的单元外,不要向其他单元写入内容,否则将引起一些系统 ...

  4. 汇编语言 王爽 第四版 第二章 检测点2.2

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点2.2 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH . 最小肯定是偏移地址为0, ...

  5. 汇编语言 王爽 第四版 实验5

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 实验5 编写.调试具有多个段的程序 1 编译连接下面程序,用debug加载.跟踪,回答问题. assume cs:code,ds:data, ...

  6. 汇编语言 王爽 第四版 实验1

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 文章目录 实验1 查看CPU和内存,用机器指令和汇编指令编程 1 开始执行命令: 2 指令 过程 3 4 实验1 查看CPU和内存,用机器指 ...

  7. 汇编语言 王爽 第四版 第三章 检测点3.2

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点3.2 1 补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中. mov ax,1 ...

  8. 汇编语言 王爽 第四版 第六章 检测点6.1

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点6.1 1 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序: assume cs:codesg cod ...

  9. 汇编语言(王爽 第三版)检测点

    这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开<微机原理与汇编语言>这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东 ...

  10. 汇编语言王爽第三版答案

    汇编语言答案(王爽) 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位. (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 . (3) ...

最新文章

  1. HTML5 3D旋转图片相册
  2. 22个案例详解Pandas数据分析/预处理时的实用技巧,超简单
  3. WM8962 HPOUT 信号强度 时间周期
  4. ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)
  5. OpenCV自定义深度学习层支持
  6. PHP Mysql-创建数据表
  7. PHP常用的自定义函数
  8. 前端学习(3027):vue+element今日头条管理-关于图标的处理
  9. python界面开发webview_python在webview和activity混合页面下怎么定位
  10. 帝国CMS模板|中国历史网整站数据MIP源码下载、带Tags提取插件
  11. LeetCode 26. Remove Duplicates from Sorted Array
  12. C++ 同步/异步与阻塞/非阻塞的区别
  13. 在GNS3中如何让NETFLOW能够捕获到流量
  14. 又给人家当分母了,顺便介绍一下GIS领域的顶级国际会议
  15. mysql 分库外置索引,MySQL的分库分表与Innodb的Btree索引
  16. 华为认证网络工程师系列教程-HCNA
  17. 秀技能:倒立及其他没用的
  18. 服务器换主板不换系统教程,主板要换,系统不变
  19. C++入门>>初识类
  20. 福大软工1816 · 第三次作业 - 结对项目1

热门文章

  1. 从教20年随笔——4409的归来
  2. SAP选择屏幕开发(一)
  3. 中职双师型教师计算机培训总结,双师型教师计算机培训心得体会.doc
  4. 丽水松阳计算机职业高中学校,浙江省松阳职专
  5. 移动渠道巨变:应用商店式微,超级 App 内分发崛起
  6. 在Windows中安装Anaconda、NumPy和Matplotlib软件包
  7. 全球及中国犬淋巴瘤治疗行业研究及十四五规划分析报告
  8. 毕业设计、卷积cnn、lstm、random walk、地址交易识别
  9. mysql---分库分表
  10. 100个冷笑话 越到后面越冷