汇编语言 延时的子程序 程序架构

设计一个延时的子程序,循环程序段执行10000次。调用该子程序可以延时一定的时间

SOFTDLY PROC
       MOV BL, 10       ;将10这个数字传入到BL中
DELAY: MOV CX, 1000     ;DELAY是这条指令的名称,方便调用,此处将1000传入CX中
WAIT1: LOOP WAIT1       ;采用计算机给出的LOOP循环指令,LOOP: CX <-- CX-1, 若CX!=0,继续循环调用WAIT1的第一句LOOP指令,直至CX = 0,完成1000次内层循环
       DEC BL           ;当CX=0时,执行BL的自减指令,BL <-- BL-1
       JNZ DELAY        ;判断,若BL!=0, 返回到DELAY顺序执行,DELAY-->WAITI
       RET              ;若BL=0,RET脱离子程序,返回原程序
SOFTDLT ENDP            ;子程序结束

SOFTDLY 是该子程序的程序名,不可缺省,方便后面调用

PROC ENDP 是子程序的开始和结束标志,这两个标识符前必须跟子程序名

部分指令解释

LOOP 循环指令

功能: CX = CX-1, 若CX = 0,顺序执行;若CX!=0,循环执行;LOOP的默认寄存器是CX

DEC 减量指令

功能:BX = BX-1,

在此处作为判断语句中的第一句,JNZ用于判断 BX是否为0,若为0则顺序执行,若不为0,则进入DELAY执行

JNZ 判断结果是否不为零

功能:若不为零,进入其后的语句执行,如:JNZ DELAY; 若为零,则顺序执行

;的作用

在汇编语言中,分号后标识注释,同C语言中的#

汇编语言程序架构

完整段定义方式

DATA1 SEGMENT
    ......       ;数据段用于定义数据
DATA1 ENDS
DATA2 SEGMENT 
    ......       ;数据段用于定义数据
DATA2 ENDS
STACK SEGMENT STACK
    ......       ;堆栈段,或用于开辟存储空间
STACK ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA1,ES:DATA2,SS:STACK
    START: MOV AX,DATA1            ;把数据段地址装入数据段寄存器
           MOV DS,AX
           MOV AX,DATA2
           MOV ES,AX
               ......                ;指令序列
           MOV AH, 4CH
           INT 21H
CODE ENDS
    END START

简化段定义方式

.MODEL SMALL/COMPACT/MEDIUM/LARGE
.386
.DATA
    ...  ;定义数据段
.STACK
    ...  ;定义堆栈段
.CODE
    ...  ;定义代码段  段地址装入必要的附加段寄存器中
END

例题

顺序程序

1.用9号DOS系统功能调用在显示器上显示一个字符串,编写完整的源程序。

DATA SEGMENT
    STRING DB 'I Love python!', 0DH, OAH, '$'
DATA ENDS

STACK SEGMENT STACK
    DW 10 DUP(?)
STACK ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:DATA, SS:STACK
    START: MOV AX, DATA
          MOV DS, AX
          MOV AH, 09H
          MOV DX, OFFSET STRING
          INT 21H
          MOV AH, 4CH
          INT 21H
CODE ENDS
    END START

2.设变量X、Y均为16位无符号数,试写一个求表达式2X + Y值的程序。

VALUE SEGMENT
    X DW 34H
    Y DW 65H
    Z DW ?,?
VALUE ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:VALUE
    START: MOV AX, VALUE  ;把所有的变量,先传入AX中
          MOV DS, AX     ;通过AX把变量放入数据段中    这是不可缺省的两步
          XOR DX, DX     ;异或将DX清零
          MOV AX, X
          ADD AX, AX
          ADC DX, 0      ;DX用于存放进位即高16位
          ADD AX, Y
          ADC DX, 0      
          MOV Z, AX
          MOV Z+2, DX    ;把高16位放于高位,由于是字(DW)操作,所以单元格+2
          MOV AH, 4CH
          INT 21H
CODE ENDS
    END START
  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值