汇编第二次试验

  这次实验有三个题目,用了一整天时间,收获颇丰,最重要的是思想上的冲击!让我真的感觉到汇编语言和高级语言的想法就是不一样!

心路历程:其实写汇编真的思维和写其他高级语言完全不同,因为汇编它是要么顺序执行A,要么跳转到B执行,但是有可能顺序执行后A根据题意是不能执行B的,于是就出现矛盾了,或者根本就跳转不回来!!如下例子:

   其实感觉写汇编的跳转指令有点像提取公因式!把无论是顺序执行还是跳转执行的相同部分放在最后,让他们能够顺序执行完,否则将会出现矛盾!

DATAS SEGMENT

    array dw 3 DUP(0)

    flag  db 0;这个最大的缺点就是会重复计算因为A1=A2=A3判断3次其实应该是

DATAS ENDS     ;输出2,但实际它输出的却是3


STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    mov flag,0;设置一个标志位

    mov si,0 ;设置初始偏移地址

    mov cx,3

    

Input:

    mov ah,01h;循环输入数字

    int 21h

    mov ah,0h

    mov ds:array[si],ax;把输入的数字赋值给存储器

    inc si

    loop Input

       

    mov si,0;重置si为0

    mov cx,2;重置cx为2

    

Compare:

    mov ax,ds:array[si]

    mov bx,ds:array[si+1]

    cmp ax,bx

    jz count   这里本来想计数,但是跳入

    inc si   

    loop Compare

    

    mov ax,ds:array[0]

    mov bx,ds:array[2]

    cmp ax,bx

    jz count

    

count:这里后!!就回不来了!,如果再写一个jmp Compare,那么程序每次顺序执行到这里时就不停跳转,进入死循环!!!但是高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值