zoukankan      html  css  js  c++  java
  • 汇编语言-[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 处。
    
  • 相关阅读:
    SQL SERVER使用技巧集
    WIN32串口编程
    经典FLASH收藏
    Windows下WinsockAPI研究
    数据库连接大全[转自中国站长网]
    VirtualBox自动重启之谜
    写个设置命令的VBS脚本工具。
    VB中KeyCode的取法
    实现串口编程的三种方法
    .NET的命名空间
  • 原文地址:https://www.cnblogs.com/chengmf/p/12454670.html
Copyright © 2011-2022 走看看