这次实验有三个题目,用了一整天时间,收获颇丰,最重要的是思想上的冲击!让我真的感觉到汇编语言和高级语言的想法就是不一样!
心路历程:其实写汇编真的思维和写其他高级语言完全不同,因为汇编它是要么顺序执行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,那么程序每次顺序执行到这里时就不停跳转,进入死循环!!!但是高