王爽《汇编语言》学习笔记--第五章+第六章

[bx]和loop指令

[BX]可以表示一个内存单元,段地址默认在DS中,偏移地址保存在BX中。

描述性符号‘()’表示一个寄存器或内存中的内容。

约定符号idata表示常量

-----------------------------------------------------------------------------------

assume cs:codesg
codesg segment
	mov ax,2
	
	mov cx,11
s:  add ax,ax
    loop s
    
	mov ax,4c00h
	int 21h
codesg ends
end 


标志S标识了一个地址,该地址处有一条指令ADD AX,AX

CX中存储的树为LOOP指令循环的次数。

 

实例:

assume cs:code
code segment
	mov ax,0ffffh
	mov ds,ax
	mov bx,6     ;以上,设置ds:bx指向ffff:6
	
	mov al,[bx]
	mov ah,0     ;以上,设置(al)=((ds*16)+(bx)),(ah)=0
	
	mov dx,0     ;累加器寄存器清0
	
	mov cx,3     ;循环3次
  s:add dx,ax
    loop s       ;以上累加计算(ax)*3
    
    mov ax,4c00h
    int 21h      ;程序返回
    
code ends
end

在汇编源程序中,数字不能以字母开头,所以大于9fffh的十六进制数据在书写是前面要加0
"G 0012"指令表示执行程序到当前代码段(段地址在CS中)的0012h处。

在遇到"LOOP 0012"代码时,使用P指令可以使DEBUG自动重复执行"LOOP 0012"和"ADD  DX,AX"指令,直至(cx)=0.

在DEBUG中

MOV AX ,[0] 表示把DS:0处的数据写入AX中

而在汇编源程序中,表示把0写入AX中

所以应该这样写

MOV AX,DS:[0]   该处的DS:即为段前缀,也可以使用CS SS ES等。

或者

MOV BX,0

MOV AX,[BX]

我们在不能确定一段内存空间中是否存放着重要数据或代码时不能随意向其中写入内容。

包含多个段的程序

实例

DATAS SEGMENT
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    dw 0,0,0,0,0,0,0,0;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX      ;DS指向DATAS段
    MOV BX,0      ;DS:BX指向DATAS段中第一个元素
    
    MOV AX,STACKS
    MOV SS,AX
    MOV SP,16      ;设置栈顶SS:SP指向STACKS:16
    
    ;此处输入代码段代码
    MOV CX,8
  S:PUSH [BX]
    ADD BX,2
    LOOP S         ;以上将DATAS段中的0~16单元中的8个字型数据一次入栈
    
    MOV BX,0
    MOV CX,8
 S0:POP [BX]
    ADD BX,2
    LOOP S0        ;以上使8个字型数据依次出栈并送到DATAS段的0~16单元中
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值