汇编---串传送指令MOVS儿童秋天画
题⽬
在数据段中有⼀个字符串,其长度为17,要求把它们转送到附加段中的⼀个缓冲区中,应该怎么做呢
显然这个题要使⽤串传送指令MOVS,MOVS每次传送的是⼀个字节/字,因此需要重复执⾏串传送指令才能完成⼀个数据串的传送,即是使⽤ REP MOVS 指令
执⾏ REP MOVS指令前,应先做好:
把原串⾸地址送给SI寄存器
把⽬的串⾸地址送给DI寄存器
二年级数学故事
把数据串长度放⼊CX计数寄存器读后感如何写
设置⽅向标志DX(CLD/STD)
代码:
data gment
mess1 db 'personal_computer'
data ends
extra gment
mess2 db 17dup(?);开辟17个连续的字节单元,但是⾥⾯没有内容
extra ends
code gment
assume cs:code,ds:data,es:extra ;这是⼀条伪指令
start:
mov ax,data
mov ds,ax
mov ax,extra
mov es,ax
lea si,mess1 ;原串⾸地址送给si
lea di,mess2 ;⽬的串⾸地址送给di
日本名字大全mov cx,17;传送次数
cld ;地址递增
rep movsb ;完成串传送,movsb是以字节⽅式进⾏传送
mov ah,4ch
int21h
code ends
end start
怎么按照地址减⼩的⽅向来传送呢?这时需要修改的地⽅如下:
lea si,mess1+16;原串末地址送给si
lea di,mess2+16;⽬的串末地址送给di
mov cx,17
std ;地址递减
rep movsb
能不能把原串和⽬的串放在同⼀个段来处理呢?
⽅式1:段共⽤,数据段和附加段共⽤同⼀个段。段是可以共⽤的,但是共⽤的前提是数据没有冲突,可以看到这⾥并没有冲突
data gment
抵抗mess1 db 'personal_computer'
mess2 db 17 dup(?);开辟17个连续的字节单元,但是⾥⾯没有内容
data ends
code gment
assume cs:code,ds:data,es:data ;这是⼀条伪指令
start:
mov ax,data
mov ds,ax
mov es,ax
冬凌草片的功效与作用lea si,mess1 ;原串⾸地址送给si
lea di,mess2 ;⽬的串⾸地址送给di
mov cx,17;传送次数
cld ;地址递增
rep movsb ;完成串传送,movsb是以字节⽅式进⾏传送
mov ah,4ch
int 21h
code ends
end start
⽅式2:把原串和⽬的串都放在附加段,这时要格外注意修改段跨越前缀
data gment
data ends
extra gment
mess1 db 'personal_computer'
多肉如何养mess2 db 17 dup(?);开辟17个连续的字节单元,但是⾥⾯没有内容
extra ends
code gment
assume cs:code,ds:data,es:extra ;这是⼀条伪指令
start:
mov ax,data
mov ds,ax
mov ax,extra
mov es,ax
lea si,mess1 ;原串⾸地址送给si
lea di,mess2 ;⽬的串⾸地址送给di
mov cx,17;传送次数
cld ;地址递增
rep movsb es:byte ptr[di],es:[si]
;完成串传送,movsb是以字节⽅式进⾏传送
mov ah,4ch
宝石简笔画
int 21h
code ends
end start
本⽂为个⼈学习笔记