博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[汇编语言]-第五章段前缀及使用 一段安全的空间
阅读量:4842 次
发布时间:2019-06-11

本文共 1677 字,大约阅读时间需要 5 分钟。

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 ends10 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,011     mov bx,012     mov cx,1213   s:mov dl,ds:[bx]14     mov es:[bx],dl15     inc bx16     loop s17      18     mov ax,4c00H19     int 21h20 code ends21 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:codecode 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 21hcode endsend

 

;将mov ax,4c00H之前的指令复制到内存0:200处assume cs:codecode 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 21hcode endsend

 

 

mov ax,4c00H / int 21h 长度为5H,为5字节,机器指令为B8004C CD21

转载于:https://www.cnblogs.com/galoishelley/p/3544126.html

你可能感兴趣的文章
正则表达式与unicode
查看>>
abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)
查看>>
div水平居中与垂直居中的方法【摘自美浩工作室官方博客 】
查看>>
UITableView 滚动条
查看>>
Android已有的原生Camera框架中加入自己的API的实现方案。
查看>>
Learn python the ninth day
查看>>
Debian+Django+uWsgi+nginx+mysql+celery
查看>>
docker 基本操作
查看>>
无缝滚动的float属性
查看>>
价值观作业
查看>>
char , unsigned char 和 signed char 区别
查看>>
挂起布局逻辑与恢复布局逻辑
查看>>
back to back
查看>>
Linux/Unix笔记本
查看>>
博弈问题之SG函数博弈小结
查看>>
30天敏捷生活(12): 整理你的空间
查看>>
纯虚函数
查看>>
线程安全总结
查看>>
Java获取正在执行的函数名
查看>>
vue 运行npm run dev报错
查看>>