汇编试验四:[bx] 和 loop 的使用
预备知识:
段前缀的使用;
ffff:0~ffff:b 和 0020:0~0020:b 的数据;
一次循环的复制效果:
但是,这种方式DS的数据得修改;
Source Code:
assume cs:code code segment mov bx,0 mov cx,12 s: mov ax,0ffffH mov ds,ax mov dl,[bx] mov ax,0020H mov ds,ax mov [bx],dl inc bx loop s mov ax,4c00H int 21H code ends end
于是,可以用两个段寄存器存放两个段地址;
(原始数据)
Source Code:
assume cs:code code segment mov ax,0ffffH mov ds,ax ;段地址 mov ax,0020H mov es,ax ;段地址 mov bx,0 ;偏移地址 mov cx,12 s: mov dl,[bx] ;默认ds,bx数据段 mov es:[bx],dl inc bx loop s mov ax,4c00H int 21H code ends end
试验任务:
将0020:0~0020:f 放 0~63
原始数据:
效果如图;
Source Code:
assume cs:code code segment mov ax,0020H mov ds,ax mov bx,0 mov cx,64 s: mov [bx],bx inc bx loop s mov ax,4c00H int 21H code ends end
试验任务2:将代码段里面的数据放到0020:0h处;
先找出loop 前的指令编号是0015,就是从0000~0016 共23个长度;
效果如图:
成功将指令机器码放到指定位置;
Source Code:
assume cs:code code segment mov ax,cs mov ds,ax mov ax,0020H mov es,ax mov bx,0 mov cx,23 s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00H int 21H code ends end