汇编——分支
昨儿刚考完汇编,觉得有些差强人意,这些东西不知道以后用不用得到,反正先写写,纸质的资料像我这种神经大条应该保存不了太久。第一次尝试,以后应该会持续更新。
汇编的这些程序我都是在DOXBOX中运行的,其他的运行软件暂时还没接触过哈哈。
分支问题:
FZ1:有三个字数据X,Y,Z,若X>Y,则求X+Y-Z,结果放在字W中,否则在W中放2X-Y+Z的结果(和我们期末考试第一道编程题类似)
Data segment
x dw 3
y dw 2
z dw 4
w dw ?
data ends
stack segment para stack
dw 10 dup(0)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
mov ax,x
cmp ax,z //ax里的内容和z比较,也就是x和z比较
ja a1 //ja(A>B) 也就是说x>z的时候跳转到a1,否则就顺序执行
shl ax,1 //移位操作,相当于X乘以2
sub ax,y
add ax,z
JMP over
a1: mov ax,x
add ax,y
sub ax,z
jmp over
over: mov w,ax
mov ah,4ch
int 21h
Code ends
End start
最后程序运行出来的结果正确
FZ2:有一个个字节变量a和一个字变量X,若a中为偶数,则把X中低字节清0,高字节不变;若a为奇数,则把x中高字节清0,低字节不变。
解题思路 :
奇数偶数的比较可以用test(测试指令,对两个操作数进行逻辑与运算,结果不送回目的操作数)比较,字变量x放16位寄存器中,以ax为例,高字节则是ah,低字节则是al。
Data segment
a db 4h
x dw 1523h
data ends
stack segment
dw 10 dup(0)
stack ends
code segment
assume cs:code,ss:stack,ds:data
start:mov ax,data
mov ds,ax
mov al,a
mov bx,x
test al,01h //判断奇偶(最后一位是0则是偶数,是1则是奇数)
jz a1 //jz(等于零就跳转到a1)
mov bh,0 //高字节清零
mov x,bx
jmp over
a1:mov bl,0 //低字节清零
mov x,bx
over: mov ah,4ch
int 21h
code ends
end start
俩题思路差不多,转移指令用好就OK。