【汇编语言笔记】 内存访问、汇编语言程序常用格式

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

3.1 内存中字的存储:内存中每个地址对应一个字节,对于字,可以利用最后一位的0/1来区分,它由两个连续的内存单元来存储。

3.2 DS和[ADDRESS] 内存单元地址,由段地址和偏移地址组成,可以利用MOV进行修改,但是不能利用立即数进行修改,需要利用通用寄存器作为中介。对于字的传送,指定低位地址,高位字节自动放在高地址单元。

3.3 MOV、SUB、ADD指令

       两个操作数,ADD/SUB/MOV寄存器或[立即数],寄存器或[立即数]

3.5 数据段:与代码段对应,在内存中划分出64K的内存段用来存储数据。CPU利用DS加上偏移量来读取数据

3.6 栈:先入后出的一种数据结构,可以利用软件或者硬件的方式实现,用于倒序数组(LIFO)。

       操作指令PUSH压栈指令,内存取址SS:SP指向栈顶元素,每次取两个字节。从高到低排列

       PUSH AX

                   SP=SP-2

                   送入AX中元素

·POP AX

                   送出AX中元素

                   SP=SP+2

       8086CPU利用SS和SP指示栈顶的地址,并提供PUSH和POP指令实现对于栈的入栈和出栈,但是无法保证栈顶不超过栈空间,如果超过栈空间,则会将栈外数据覆盖。

       栈空间是一段在内存中分配的以特殊的访问方式进行操作的空间,它从地址较大段向地址较小段写入,从地址较小段向地址较大段读取

       PUSH  POP可以操作通用寄存器、段寄存器和内存单元,只有一个操作数。

  栈段在编程时进行安排,CPU在需要读取栈段时会将SS:SP所指向内存的内容进行访问

       关于栈的使用:

                   使用栈之前需要首先分配栈空间,利用数据段.DATA中  DUP(?) 

                   利用MOV 来指定SS和SP,指定到一定的内存空间为栈空间。

        

第四章   程序格式及程序的解读

格式一:
assume cs:codeseg ds:dataseg ss:stackseg ;assume关联段寄存器与段定义
codeseg segment
MOV AX,DATASEG
MOV DS,AX
MOV AX,STACKSEG
MOV SS,AX
;
MOV AH,4CH
INT21H
codeseg ends
dataseg segment
;
cdataseg ends
stackseg segment
;
stackseg ends
end


格式二:
.MODEL SMALL
.STACK 100H  ;规定栈大小
.DATA
;
.CODE
[LABEL] PROC FAR
	MOV AX,@DATA
	MOV DS,AX
;
	MOV AH,4CH
	INT 21H
[LABEL] ENDP
	END [LABEL] 

格式三:
	.MODEL	SMALL			; 设定8086汇编程序使用Small model
	.8086				; 设定采用8086汇编指令集
	.stack 100h				; 定义256字节容量的堆栈
	.data					; 定义数据段
	.code						; Code segment definition
	.startup					; 定义汇编程序执行入口点
	;
	END					;指示汇编程序结束编译

 格式四:
	ORG 100H
	;

注意程序执行时会保留头部100H的内存空间来保存信息

 

当然,也可以在代码段使用数据,这是数据将保存在代码段,可以利用CS:IP来使用这些数据。也可以在代码段使用栈,基本代码如下:

         MOVAX,CS

         MOVSS,AX

         MOVSP,30H  ;堆栈指针指向CS:30H,当然,在代码段前面部分需要分配相对应大小的数据空间。

         但是为了程序结构清晰,最好代码数据堆栈分开放置


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值