zoukankan      html  css  js  c++  java
  • 汇编 第4,5,6,7章

    第4章

    一个源程序从写出到执行的过程:

    1,。编译汇编源程序(产生一个存储源程序的文本文件)

     2.对源程序进行编译连接(生成可执行文件  包括程序和数据以及相关的描述信息)

    3.执行

    二。汇编源程序框架:

    assume cs:codesg

    codesg segment

                mov ax,0123H

                mov bx,0456H

                ...

                ...

                mov ax,4c00H

                int 21H

    codesg ends

    end

    segment和ends是一对成对使用的伪指令,用来定义段

    段名 segment

    ..

    段名 ends

    end是汇编程序结束标记

    assume含义是假设,假设某一段寄存器和程序的某一个用segment和ends定义的段相关联

     在编译连接时可以加上分号,自动忽略中间文件的生成,简化过程。

    在DOS中,command处理各种输入:命令或要执行的程序的文件名。我们就是通过command来进行工作的。

    在DOS中直接执行.exe时,是正在运行的command,将.exe文件中的程序加载入内存。

    command设置CPU的CS:IP指向程序的第一条指令(程序入口),从而程序得以运行。

    程序运行结束后,返回到command中,CPU继续运行command

    第5章

    【bx】和loop指令

    要完整地描述一个内存单元,需要两种信息:1,内存单元地址  2.内存单元长度(类型)

    【bx】表示一个内存单元,段地址在ds中

    loop指令用于循环

    标号:标号代表一个地址

    Debug和汇编编译器masm对指令的不同处理

    Debug:mov ax,[0]   在汇编源程序中会被当做mov ax,0处理

    要实现预期效果  借助bx,将偏移地址送入bx寄存器中,用【bx】的方式来访问内存单元

    如:

    mov ax,2000H

    mov ds,ax

    mov bx,0

    mov al,[bx]

    如果想像在Debug中那样直接写,需要显式声明段地址所在的寄存器

    mov al,ds:[0]

    如果在“[]”里用寄存器,间接段地址默认在ds中

    loop和【bx】联合实例

    assume cs:code

    code segment

             mov ax,0fffh

             mov ds,ax

             mov bx,0

             mov cx,12

    s:      mov al,[bx]

             mov ah,0

             add dx,ax

             inc bx

             loop s

    mov ax,4c00h

    int 21h

    code ends

    end

    段前缀:出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的"ds:' "cs:" "ss:" "es:

    DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据或代码,尽量使用这段空间

    第六章:包含多个段的程序

    使用不同的段  数据段  栈段

    数据段中  dw(define word)用于定义字数据  db定义字节

    end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方end start

    具体用法如下:

    assume cs:code
    a segment
      db 1,2,3,4,5,6,7,8
    a ends
    
    b segment
      db 1,2,3,4,5,6,7,8
    b ends
    
    c1 segment   
      db 8 dup(0)
    c1 ends    
    code segment
    start:
          mov ax,a
          mov ds,ax
          mov bx,0
          mov ax, c1
          mov es,ax
          mov cx,8
    s:   mov ax,[bx]
         mov es:[bx],ax
         add bx,1    
         loop s
    
         mov ax,b
         mov ds,ax
         mov bx,0
         mov ax,c1
         mov es,ax
         mov cx,8
    s2: mov al,[bx]
          mov ah,0
          add es:[bx],ax
          add bx,1
          loop s2
    mov ax,4c00h
    int 21h
    code ends
    end start

     第七章

     更灵活的定位内存地址的方法

    两个指令 or   and

    大小写字母转换:

    转化成大写:置0

    and 11011111b

    转换成小写:置1

    or 00100000b

    大写+20H=小写

    大写+32=小写

    SI和DI

    是8086CPU中与bx功能相近的寄存器,不能分成两个8位寄存器来使用

    利用bx,si,di可以实现更灵活的内存处理方式,类似数组

    如下:

    题目:编程,将datasg段中每个单词的前4个字母改为大写字母。

    代码如下:

    assume cs:codesg,ss:stacksg,ds:datasg
    
    stacksg segment
    dw 0,0,0,0,0,0,0,0
    stacksg ends
    
    datasg segment
    db '1. display      '
    db '2. brows        '
    db '3. replace      '
    db '4. modify      '
    datasg ends
    
    codesg segment
    start:
          mov ax,stacksg
          mov ss,ax
          mov sp,16
    
          mov ax,datasg
          mov ds,ax
          mov bx,0
    
          mov cx,4
    
    s0:  push cx
          mov cx,4
          mov si,3
    
    s:   mov al,[bx+si]
         and al,11011111b
         mov [bx+si],al
         inc si
        loop s
    
        add bx,16
        pop cx
        loop s0
    mov ax,4c00h
    int 21h
    codesg ends
    end start
    
       
    

      

  • 相关阅读:
    PAT (Advanced Level) 1114. Family Property (25)
    PAT (Advanced Level) 1113. Integer Set Partition (25)
    PAT (Advanced Level) 1112. Stucked Keyboard (20)
    PAT (Advanced Level) 1111. Online Map (30)
    PAT (Advanced Level) 1110. Complete Binary Tree (25)
    PAT (Advanced Level) 1109. Group Photo (25)
    PAT (Advanced Level) 1108. Finding Average (20)
    PAT (Advanced Level) 1107. Social Clusters (30)
    PAT (Advanced Level) 1106. Lowest Price in Supply Chain (25)
    PAT (Advanced Level) 1105. Spiral Matrix (25)
  • 原文地址:https://www.cnblogs.com/wtblogwt/p/9942237.html
Copyright © 2011-2022 走看看