《汇编语言》(第2版)学习笔记

本文详细介绍了8086CPU的内存地址空间、寄存器使用、内存访问方法、栈机制、数据处理和指令转移等内容,并通过实验展示了Debug工具的使用,包括call和ret指令、中断处理、端口读写等。此外,还涵盖了标志寄存器、内中断和外中断的原理及应用。
摘要由CSDN通过智能技术生成

第1章 基础知识

1.15 内存地址空间

8086CPU内存地址分配
在这里插入图片描述

第2章 寄存器

实验1 查看CPU和内存 Debug的使用

常用的几个命令

在这里插入图片描述
按Alt+Enter可进入\退出全屏模式

用e命令向内存中写入字符或字符串

e 1000:0  '1' 'a' 'b' 'c'    *//写入字符*
e 1000:0 "abcde"  2 'x' "1+2+3=?"   *//写入字符串*

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

3.1内存中字的存储

N地址单元存放的字节型数据
N地址字单元存放的字型数据——N地址为起始

3.2 DS和[address]读写内存的方法

8086CPU以 段地址:偏移地址的形式操作内存单元
程序中默认在DS寄存器中存放段地址
程序中以[address]的形式表示偏移地址
8086CPU中不允许直接改变段地址寄存器的值

例如:读取100066H地址单元的字节

mov ax,1000
mov ds,ax
mov bl,[66]  //解释:mov bl,1000:66

3.7 CPU提供的栈机制

SS和SP分别存放栈的段地址和偏移地址
8086CPU入栈和出栈都是以字为单位操作的
入栈时,栈指针由高地址向低地址移动
出栈时,栈指针由低地址向高地址移动
栈的大小:为16的倍数

3.9 push和pop指令

支持三种形式
push/pop 寄存器/段地址寄存器/内存单元

mov ax,1000
mov ds,ax
push [0]   //mov ss:sp 1000:0

push指令的执行步骤:1)sp -= 2; 2)将ss:sp中的字型数据取出
pop指令的执行步骤: 1)将ss:sp中的字型数据取出;2)sp += 2

实验2

注意:Debug中用t命令执行指令时,若修改段地址寄存器SS,则下一条语句会被自动执行。

第4章 第一个程序

4.2 源程序

asume cs:code
code segment
	mov ax,0123h
	mov bx,0456h
	add ax,bx
	add ax,ax

	mov ax,4c00h
	int 21h
code ends
end

汇编语言的源程序包含两种指令:
1)伪指令——编译器执行
a)定义程序段
xxxx segment

xxxx ends
b)结束编译:end
c)关联段地址寄存器:asume
asume cs:code,ds:data,ss:stack

2)汇编指令——CPU执行
程序返回指令:
mov ax,4c00h
int 21h

4.9 程序执行过程的跟踪

执行程序载入之后:
1)CX寄存器中存放的值表示程序的大小
2)CS:IP存放程序执行地址
3)DS寄存器存放PSP的地址,PSP区大小为256个字节,PSP之后紧跟代码区
即 CS:IP = DS + 10h

第5章 [bx]和loop

5.1 [bx]

[bx]表示一个地址单元,偏移放在bx寄存器中

 mov ax,[bx] //(ax) = ((ds)*16+(bx))

5.2 loop和cx

计算 2^10

     mov ax,2
     mov cx,9
lp: add ax,ax
     loop lp

5.3 debug中p命令和g命令

p:可以执行到循环结束
g 偏移地址:相当于断点执行到ds:偏移地址的地方

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

debug中:mov ax,[0] 相当于 mov ax,ds:0
masm编译:mov ax,[0] 相当与 mov ax,0
访问ds:0处的内存单元应写成:

mov bx,0
mov ax,[bx]

或者

mov ax,ds:[0]

5.6 段前缀

mov ax,20h
mov es,ax
mov es:[0h],ax

出现在访问内存单元的指令中,用于显示的表示内存单元段地址的“ds”,“cs”,“ss”,“es”,在汇编语言中称之为段前缀。

第6章 包含多个段的程序

6.1在代码段中使用数据

1)dw 0123h,0456h,0789h
dw(define word)的含义是定义字型数据
db(define byte)的含义时定义字节型数据
2)代码结束时end后面加标号,则指明代码入口

assume cs:code
code segment
	....
	数据
	...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值