zoukankan      html  css  js  c++  java
  • 直接定址表(学习汇编)

    1.我们可以使用一种标号,这种标号不但表示内存单元的地址,还表示了内存单元的长度,即表示在此标号处的单元,是一个字节单元,还是字单元,还是双字单元。如

      a:db 1,2,3,4,5,6,7,8             改写为    a   db   1,2,3,4,5,6,7,8

      b:dw  0                          改变为    b     dw   0

    使用不带“:”的标号,它们是同时描述内存地址和单元长度的标号。这种标号包含了对单元长度的描述,所以,在指令中,它可以代表一个段中的内存单元。

    2.使用这种包含单元长度的标号,可以使我们以简洁的形式访问内存中的数据。以后,我们将这种标号称为数据标号,它标记了存储数据的单元的地址和长度。它不同于仅仅表示地址的地址标号。

     

    在其他段中使用数据标号

    1.一般来说,我们不在代码段中定义数据,而是将数据定义到其他段中。在其他段中,我们也可以使用数据标号来描述存储数据的单元的地址和长度。

    2.注意,在后面加有“:”的地址标号,只能在代码段中使用,不能再其他段中使用。

    3.注意,如果想在代码段中直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来。否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中。当然,这种联系是编译器需要的,但绝对不是说,我们因为编译器的工作需要,用assume指令将段寄存器和某个段相联系,段寄存器中就会真的存放该段的地址。我们在程序中还要使用指令对段寄存器进行设置。

    4.可以将标号当做数据来定义,此时,编译器将标号所表示的地址当做数据的值。

    5.seg操作符,功能为取得某一标号的段地址。

    附上一个用直接定址表来计算sin(x)的程序:

     1 assume cs:code 
     2 code segment 
     3 start:
     4         mov al,60
     5         call showsin
     6         
     7         mov ax,4c00h
     8         int 21h
     9         
    10 showsin:
    11         jmp short show 
    12         table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180
    13         ag0 db '0',0
    14         ag30 db '0.5', 0 
    15         ag60 db '0.866', 0 
    16         ag90 db '1',0
    17         ag120 db '0.866',0 
    18         ag150 db '0.5',0 
    19         ag180 db '0',0
    20         
    21 show :
    22         push bx
    23         push es
    24         push si 
    25         mov bx,0b800h
    26         mov es,bx 
    27         
    28         mov ah,0 
    29         mov bl,30 
    30         div bl 
    31         mov bl,al ;角度/30作为table偏移,商al放到bl中
    32         mov bh,0 
    33         add bx ,bx   ;因为dw每个占2字节,0-1,,1-2 ...
    34         mov bx,table[bx]
    35         mov si,160*23+40*2
    36 shows:
    37         mov ah,cs:[bx]
    38         cmp ah,0     ;ah是否为0,是则跳转至showret
    39         je showret 
    40         mov es:[si],ah 
    41         inc bx 
    42         add si,2
    43         jmp shows 
    44         
    45 showret:
    46         pop si 
    47         pop es 
    48         pop bx 
    49         ret 
    50         
    51         
    52         
    53 code ends
    54 end start 
  • 相关阅读:
    caffe: compile error: Could not open or find file your path~~/resized_data/0 and a total of 2 images .
    caffe: compile error : undefined reference to `cv::imread(cv::String const&, int)' et al.
    caffe: test code for Deep Learning approach
    C++ little errors , Big problem
    VGG_19 train_vali.prototxt file
    matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。
    利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning
    matlab 相关代码记录
    论文阅读之 Inferring Analogous Attributes CVPR 2014
    布局的几种方式(静态布局、自适应布局、流式布局、响应式布局、弹性布局)
  • 原文地址:https://www.cnblogs.com/ht-beyond/p/3915877.html
Copyright © 2011-2022 走看看