zoukankan      html  css  js  c++  java
  • [汇编语言]-第五章段前缀及使用 一段安全的空间

    1- 段前缀

      mov ax,ds:[bx]

      mov ax,cs:[bx]

      mov ax,ss:[bx]

      mov ax,es:[bx]

      mov ax,ss:[0]

      mov ax,cs:[0]

    这些出现在访问内存单元的指令中,用于显式的指明内存单元的段地址的"ds,cs,ss,es"在汇编语言中称为段前缀

    2- 一段安全的空间

    在8086模式中,随意向一段内存空间写入内容是很危险的,因为这段内存空间可能存放着重要的代码或数据.

     1 assume cs:code
     2 code segment
     3     mov ax,0
     4     mov ds,ax
     5     mov ds:[26H],ax
     6     
     7     mov ax:4c00H
     8     int 21h
     9 code ends
    10 end

    会发生错误.

    在操作系统环境中工作,操作系统管理所有资源,也包括内存,如果我们需要向内存空间写入数据的话,要使用操作系统给我们分配的空间.而不应直接用地址任意指定内存单元,向里面写入.

     1 ;将内存ffff:0~ffff:b单元中的数据拷贝到0:200~0:20b单元中
     2 assume cs:code
     3 code segment
     4     mov ax,0ffffH
     5     mov ds,ax
     6     
     7     mov ax,0020H
     8     mov es,ax
     9     
    10     mov dx,0
    11     mov bx,0
    12     mov cx,12
    13   s:mov dl,ds:[bx]
    14     mov es:[bx],dl
    15     inc bx
    16     loop s
    17      
    18     mov ax,4c00H
    19     int 21h
    20 code ends
    21 end

     

    总结:

    (1) 我们需要向一段内存写入内容

    (2) 这段内存空间不应存放系统或其他程序的数据和代码,否则写入操作很可能发生错误

    (3) Dos方式下一般情况 0:200-0:300空间中没有系统或其他程序数据和代码

    (4) 以后如果需要向一段内存中直接写入内容时,就使用0:200-0:300这段空间

    0:200-0:300 可转为 0200H-0300H 即 020:0-030:0

    3- [bx]和loop的使用

    ;向内存0:200-0:23F依次传送数据0-63(3FH)
    assume cs:code
    code segment
        mov ax,0020H
        mov ds,ax
        
        mov bx,0
        mov cx,65
      s:mov ds:[bx],bl
        inc bx
        loop s
        
        mov ax,4c00H
        int 21h
    code ends
    end
    ;将mov ax,4c00H之前的指令复制到内存0:200处
    assume cs:code
    code segment
        mov ax,code
        mov ds,ax
        
        mov ax,0020H
        mov es,ax
        
        mov bx,0
        mov cx,18H    ;运行时debug p10.exe,后-r cx的值为1DH,为整个程序的长度,按照题目要求mov ax,4c00H之前的指令,那么mov ax,4c00H / int 21h 长度为5H 所以 1DH - 5H =18H
      s:mov al,[bx]
          mov es:[bx],al
          inc bx
          loop s
          
          mov ax,4c00H
          int 21h
    code ends
    end
    mov ax,4c00H / int 21h 长度为5H,为5字节,机器指令为B8004C CD21

  • 相关阅读:
    [导入]CodeSmith应用(二)
    [导入]WebService开发(一) 如何使用Soap头
    [导入]WebService开发(三)Web Service Software Factory
    [导入]CodeSmith应用(三)
    [导入]WebService开发(二) 如何使用Soap扩展
    [导入]WinForm下的Msn Popup
    [导入]Flex与Dotnet 之 WebService
    POJ 1243 One Person(经典DP)
    汇编的艺术(02)& operator
    数据结构练习(01)把二元查找树转变成排序的双向链表
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3544126.html
Copyright © 2011-2022 走看看