zoukankan      html  css  js  c++  java
  • [汇编语言]-第七章 更灵活的定位内存地址的方法

    1- or, and 指令

      mov al,01100011B

      and  al,00111011B

      执行后al=00100011B

      mov al,01100011B

      or  al,00111011B

     执行后al=01111011B

    2- 关于ASCII码

      世界上有很多编码方案,有一种方案叫做ASCII编码.所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象.比如在ASCII编码方案中,用61H表示"a", 62H表示"b", 一种规则需要人们遵守才有意义.

    3- 一个文本编辑过程中.就包含着按照ASCII编码规则进行的编码和解码.

      在文本编辑器中,我们按下a键,这个按键的信息被送入计算机,计算机用ASCII码的规则对其进行编码.将其转化为61H存储在内存的指定空间中.文本编辑器从内存中取出61H,将其送入到显卡上的显存中,工作在文本模式下的显卡,用ASCII码的编码规则解释显存中的内容.61H被当做字符'a', 显卡驱动显示器, 将字符"a"的图像画在屏幕上.

    4- 如果想要在显示器上显示a, 就要给显卡提供"a"的ASCII码, 61H. 如何提供, 当然是写入显存中.

    5- 以字符形式给出的数据

      我们可以在汇编程序中, 用'..'的方式指明数据是以字符的形式给出的, 编辑器将把他们转化为相对应的ASCII码.

     1 assume ds:data,cs:code
     2 data segment
     3     db 'unIX'
     4     db 'forRK'
     5 data ends
     6 code segment
     7 start:     mov    al,'a'
     8         mov    bl,'b'
     9         
    10         mov ax,4c00h
    11         int 21h
    12 code ends
    13 end start

     //我们可以看出data段中每个数据所对应的ACSII字符

    6- 大小写转换的问题

     1 comment *
     2 将datasg中的第一个字符串转化为大写,第二个字符串转化为小写
     3 大写 十六进制 二进制      小写  十六进制 二进制
     4 A        41    01000001        a        61    01100001
     5 B        42    01000010        b        62    01100010
     6 C        43    01000011        c        63    01100011
     7 D        44    01000100        d        64    01100100
     8 E        45    01000101        e        65    01100101
     9 F        46    01000110        f        66    01100110
    10 * comment
    11 
    12 assume cs:codesg,ds:datasg
    13 datasg segment
    14     db 'BaSiC'
    15     db 'iNFOrMaTiOn'
    16 datasg ends
    17 codesg segment
    18 start:    mov ax,datasg
    19         mov ds,ax
    20         
    21         mov bx,0
    22         mov cx,5
    23     s:  mov al,[bx]
    24         and al,11011111B
    25         mov [bx],al
    26         inc bx
    27         loop s
    28         
    29         mov bx,5
    30         mov cx,11
    31     s0:    mov al,[bx]
    32         or    al,00100000B
    33         mov [bx],al
    34         inc bx
    35         loop s0
    36         
    37         mov ax,4c00h
    38         int 21h
    39 codesg ends
    40 end start

    执行后:

     7- [bx+idata] 表示一个内存单元, 他的偏移地址为(bx)+idata (bx中得数据加上idata)

      mov ax,[bx+200]

      (ax) = ((ds)*16+(bx)+200)

      该指令可以写成如下格式(常用):

      mov ax,[200+bx]

      mov ax,200[bx]

      mov ax,[bx].200

      例子:

      2000:1000 BE 00 06 00 00 ......

      mov ax,2000H

      mov ds,ax

      mov bx,1000

      mov ax,[bx]    //ax 00BEH

      mov cx,[bx + 1]  //cx 0600H

      add cx,[bx + 2]  //(cx) = 0600 + 0006 = 0606H

  • 相关阅读:
    单片机开发之C语言编程基本规范
    【C语言基础】编码规范
    常见的C语言编程规范
    第一次使用unity3d
    Chapter 1 First Sight——25
    poi的各种单元格样式以及一些常用的配置
    烧蜡烛棒测时间
    springMVC下载文件前修改文件名字
    ajax上传文件
    Chapter 1 First Sight——24
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3566202.html
Copyright © 2011-2022 走看看