汇编——分支

昨儿刚考完汇编,觉得有些差强人意,这些东西不知道以后用不用得到,反正先写写,纸质的资料像我这种神经大条应该保存不了太久。第一次尝试,以后应该会持续更新。
汇编的这些程序我都是在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

BX变成1500,低字节已清零
俩题思路差不多,转移指令用好就OK。

posted @ 2019-06-06 21:53  柯星  阅读(5)  评论(0编辑  收藏  举报  来源