zoukankan      html  css  js  c++  java
  • 汇编语言-直接定址表

    汇编语言-直接定址表

    代码功能:
    将a地址中的1~8的数值相加,并保存到b地址中。

    assume cs:code  
    
    code segment  
        a:db 1,2,3,4,5,6,7,8  
        b:dw 0  
    start:  
        mov si,offset a  
        mov di,offset b  
    
        mov ah,0  
        mov cx,8  
    s:  
        mov al,cs:[si]  
        add cs:[di],ax  
        inc si  
        loop s  
    
        mov ax,4c00h  
        int 21h  
    
        mov ax,4c00h  
        int 21h  
    code ends  
    
    end start  

    仔细看一下,下面代码的标号的不同。下面的标号a、b后面没有冒号。它们是可以描述单元长度的标号。又叫数据标号

    assume cs:code  
    
    code segment  
        a db 1,2,3,4,5,6,7,8  
        b dw 0  
    start:  
        mov si,offset a  
    
        mov ah,0  
        mov cx,8  
    s:  
        mov al,a[si]  
        add b,ax  
        inc si  
        loop s  
    
        mov ax,4c00h  
        int 21h  
    
        mov ax,4c00h  
        int 21h  
    code ends  
    
    end start  

    数据标号详解

    数据标号不但表示内存单元的地址,还表示了内存单元的长度,即表示在此标号处的单元,是一个字节单元,还是字单元,还是双字节单元。

    我们可以:

    mov ax,b        相当于  mov ax,cs:[8]
    mov b,2         相当于  mov word ptr cs:[8],2
    inc b           相当于inc   word ptr cs:[8]
    mov al,a[si]    相当于 mov al,cs:0[si]
    mov al,a[3]     相当于mov al,cs:0[3]

    但是下面的是错的

    mov al,b  因为b是dw,字型的
    add  b,al

    在其他段中使用数据标号

    普通的后面带有“:”的标号,是只能定义在代码段的。数据标号可以用在其他段中。


    下面代码是上面代码的改进版:

    assume cs:code,ds:data  
    
    data segment  
        a db 1,2,3,4,5,6,7,8  
        b dw 0  
    data ends  
    
    code segment  
    
    start:  
        mov ax,data  
        mov ds,ax  
    
        mov si,offset a  
    
        mov ah,0  
        mov cx,8  
    s:  
        mov al,a[si]  
        add b,ax  
        inc si  
        loop s  
    
        mov ax,4c00h  
        int 21h  
    
        mov ax,4c00h  
        int 21h  
    code ends  
    
    end start  
    1. 如果想把ds:b 直接写成 b,就必须在assume 后加上 cs:data
    2. 如果把ds和b寄存联系起来,那么在代码中,必须设置 mov ax,data mov ds,ax
  • 相关阅读:
    PHP数组
    java中线程池的几种实现方式
    JAVA是是如何处理字符的。
    byte范围及8种常见数据类型
    对Spring 及SpringMVC的理解
    Nginx+Tomcat搭建负载均衡
    nginx + tomcat配置负载均衡
    Java并发编程:Lock
    Java内部类详解
    奇怪的Java题:为什么1000 == 1000返回为False,而100 == 100会返回为True?
  • 原文地址:https://www.cnblogs.com/AbeDay/p/5026850.html
Copyright © 2011-2022 走看看