前言
本文针对汇编语言中的loop指令进行学习
一、LOOP语言
loop在汇编语言中用于循环,其关联的通用寄存器为cx寄存器,通常情况下,循环次数由cx寄存器中的数值决定
二、场景题
我们要向2000H:1000H这里开始填写0123456789ABCDEF这些字节数据,通过编程我们应如何书写
assume cs:code
code segment
s:mov ax,2000H
mov ds,ax
mov bx,1000H
mov cx,16
mov dl,0
setNumber: mov ds:[bx],dl
inc dl
inc bx
loop setNumber
mov ax,4C00H
int 21H
code ends
end s
用编程进行加法计算123*456,结果存在放AX中
assume cs:code
code segment
mov ax,0
mov cx,123 ;
addNumber: add ax.236
loop addNumber
mov ax,4C00H
int 21H
code ends
end
将内存求FFFF:0到FFFF:F内存单元中的数据复制到的0:200~0:20F中
assume cs:code
code segment
;ds 寄存器代表数据从哪里来 es寄存器 数据到哪里去
mov ax,0FFFFH
mov ds,ax
mov ax,20H
mov es,ax
mov bx,0
mov cx,8
setNumber: mov dx,ds:[bx]
mov es:[bx],dx
add bx,2
loop setNumber
mov ax,4C00H
int 21H
code ends
end
向内存0:200 ~ 0:23F 依次传递数据 0 ~ 63H(3FH),程序中只能使用9条指令
assume cs:code
code segment
;ds 寄存器代表数据从哪里来 es寄存器 数据到哪里去
mov ax,20H
mov es,ax
mov cx,64
mov bx,0
setNumber: mov es:[bx],bl
inc bx
loop setNumber
mov ax,4C00H
int 21H
code ends
end
二、基于BX寄存器修改偏移地址转移数据的总结
基于ax修改ds地址寄存器的相关内容其实并不安全,更安全的做法是基于系统分配给我们的内存去设置数据段和栈段,这在后续学习中会涉及
|