• 汇编语言-[bx]和loop指令和多个段


    5.1 [BX]和内存单元的描述

    要完成描述一个内存单元,需要两种信息:

    • 内存单元的地址:

      • 可以用 [0] 表示一个内存单元, 0 表示单元的偏移地址,段地址默认在 ds 中;
      • 同样也可以用 [bx] 表示一个内存单元,它的偏移地址在 bx 中;
    • 内存单元的长度(类型):

      • 将一个内存单元的内容送入 ax ,这个内存单元的长度就为 2 字节(字单元),存放一个字;
      • 将一个内存单元的内容送入 al,这个内存单元的长度就为 1 字节(字节单元),存放一个字节;

    5.2 Loop 指令

    loop 指令和 cx 相配合实现循环功能的,cx中存放循环的次数。
    loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两步操作

    • (cx)=(cx)- 1
    • 判断 cx 中的值,不为零则转至标号处执行程序,如果为零则向下执行。
      其框架为:
    	mov	cx, 循环次数
    s:
    	循环执行的程序段
    	loop s
    

    5.3 包含多个段的程序

    在8086模式限制下如果数据,栈和代码需要的空间超过64KB,就不能放在一个段中,应该把数据,栈和代码放在对应的代码段栈段数据段
    例如:

    assume cs:code,ds:data,ss:stack
    data segment
    	dw 0001h,0002h,0003h,0004h,0005h,0006h,0007h,0008h	;dw定义字形数据
    data ends
    stack segment
    	db 0,0,0,0,0,0,0,0		;定义字节型数据
    stack ends
    code segment
    start: 
    	mov ax,data		;把数据段地址放入ax
    	mov ds,ax
    	mov ax,stack		;把栈段地址放入ax
    	mov ss,ax
    	mov sp,18h	;设置栈顶指向18h ,18h = 数据段8个字+栈段8个字节共24字节换成16进制。
    	mov ax,4c00h
    	int 21h
    code ends
    end start		;end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。在这指明了程序的入口在标号 start 处。
    
  • 相关阅读:
    spring mvc技术
    转 easyUI的iframe子页面操作父页面元素
    DG
    SqlServer数据库分离附加操作
    SqlServer2008系统数据库的作用和特点
    Oracle基础学习记录1.0
    聚集索引与非聚集索引
    苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)
    iOS Crash文件的解析
    在同一台电脑上使用两个github账户
  • 原文地址:https://www.cnblogs.com/chengmf/p/12454670.html
Copyright © 2020-2023  润新知