;编程计算0000h:0000h内存单元中数据乘以3的结果,结果保存在dx中。
;本次计算的一个字节单元中的数据,它是8位的。所以需要使用8位的寄存器取值。
;这个内存单元中的数据最大可能是255,255×3的结果会超出8位,所以运算的时候,需采用16位寄存器。
;当然,最终结果也要保存在16位寄存器之中。
assume cs:code
code segment
mov ax,0000h
mov ds,ax ;段地址
mov bx,0000h ;偏移地址
mov dx,0 ;初始化dx
mov ah,0 ;ah置为0
mov al,[bx] ;用al取出0000h:0000h单元一个字节的内容
mov cx,3 ;循环3次
s: add dx,ax ;用16位寄存器来进行运算
loop s
mov ax,4c00h
int 21h
code ends
end
计算结果如下图所示:
AX中的数据乘以3刚好得到DX中的数据。60H*3H=120H
;Dos操作系统一般不会使用0:200-0:2ff这段内存空间
;编程,向内存0:200-0:23F依次传送数据0-63
;8086的地址组成方式导致实际物理地址可以由不同的段地址和偏移地址构成。
;所以我们处理上述地址为"20h:0-20h:3fh",它和0:200-0:23F描述的是相同的地址
assume cs:code
code segment
mov ax,20h
mov ds,ax ;段地址
mov ax,0 ;初始化ax
mov bx,0h ;偏移地址
mov cx,64 ;循环64次
s: mov [bx],ax ;给内存单元赋值
inc ax
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
写入数据结果如下:
;这是在上面的程序的基础上做了一个要求,这个要求是程序只能有9条指令。
;这9条指令还需要包括mov ax,4c00h和int 21h
;编程,向内存0:200-0:23F依次传送数据0-63,只能使用9条指令。
;经过观察可以得出,ax和bx的变化是同步的,所以可以不使用ax。减少2条指令以后
assume cs:code
code segment
mov ax,20h
mov ds,ax
mov bx,0h
mov cx,64
s: mov [bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end