汇编语言练习_2_批量传送 & 条件转移

解析

movsb指令(mov string byte)

以ds:si为源地址,es:di为目的地址进行传送,每次传送一个字节

cx指定传送次数

DF寄存器设置数据读取以及数据填入的方向
DF=0时,每次操作后si、di递增
DF=1时,每次操作后si、di递减

cld指令将DF置0
std指令将DF置1

movsw指令(mov string word)

以ds:si为源地址,es:di为目的地址进行传送,每次传送一个字

cx指定传送次数

当标志寄存器中标志位DF设置数据读取以及数据填入的方向
DF=0时,每次操作后si、di递增
DF=1时,每次操作后si、di递减

cld指令将DF置0
std指令将DF置1

jns指令(jmp not sf)

1、
条件跳转指令
根据标志寄存器中标志位SF(也称符号位)的值判断是否跳转
SF=0时,发生跳转
SF=1时,则不跳转

2、
与跳转指令js刚好相反

3、
dec指令影响标志位SF
当dec指令计算结果的最高位,也就是符号位为0时,SF置0,符号位为1时,SF置1

效果

movsb指令显示"Hello"

movsw指令显示"BOCHS"

jns指令显示"HelloBOCHS"

代码

前期准备

start:
	jmp code

data:
	;也可使用ASCII码
	text0 db 'H',0x07,'e',0x07,'l',0x07,'l',0x07,'o',0x07
	text1 db 'B',0x07,'O',0x07,'C',0x07,'H',0x07,'S',0x07


code:
	;es:di指向目的内存地址
	mov ax,0xB800
	mov es,ax
	mov di,0x0
	
	;ds:si指向源内存地址
	mov ax,0x07c0
	mov ds,ax
	mov si,text0

批量传送指令 movsb

	;#####################字符串"Hello"打印,单个byte为传送单位
	;传送次数
	mov cx,text1-text0

	;由低地址到高地址传送
	cld
	
	;传送开始
	rep movsb

批量传送指令 movsw

	;换行显示
	mov di,160
	
	;#####################字符串"BOCHS"打印,两个byte为传送单位
	;传送次数
	mov cx,(code-text1)/2
	
	;由低地址到高地址传送
	cld
	
	;传送开始
	rep movsw

条件转移 jns

	;换行显示
	mov di,320
	
	;#####################条件跳转传送
	;ds:si指向源内存地址
	mov ax,0x07c0
	mov ds,ax
	mov si,text0

	;传送次数 
	mov cx,code-text0
	dec cx
l:
	;al做中转站
	mov al,[ds:si]
	inc si
	mov byte [es:di],al
	inc di
	dec cx
	jns l

字符填充

	jmp $
current:
	;字符填充
	times 510-(current-start) db 0
	db 0x55,0xAA       ;BIOS要求:0x55,0xAA结尾
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值