emu8086分支例题(课堂知识)


前言

作为一名在校大学生,我将近期所学的知识进行总结。如有不足,欢迎交流。


提示:以下是本篇文章正文内容,下面案例可供参考

例1 :求AX和BX寄存器中两个无符号数之差的绝对值,结果放在RESULT单元

实现代码

代码如下(示例):

; multi-segment executable file template.

data segment    
    result DW 0    
ends


code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    mov bx,1234H
    mov ax,0cd34H
    cmp ax,bx    ;结果不返回按下,只影响Flag
    jae adyb;ax >= bx ,执行ax - bx
    sub bx,ax ;bx > ax   执行bx -= ax
    mov result,bx    
    jmp js
    
adyb: sub ax,bx   ;结果在AX中
    mov result,ax
    
 js:   mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

例2 :设内存中有三个互不相等的有符号字数据,分别存放在X、Y、Z字单元中, 编程将其中最小值存入MIN单元。

实现代码

; multi-segment executable file template.

data segment   
    
  x    DW  1213H             ;可以自行设置X、Y、Z的值
  y    DW  0cd54H
  z    DW  1211H
  min  DW  0
   
ends


code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
      
      ;注意mins不是分钟(我百度了一下,minutes和mins长的也挺像的),本人英语不太行,希望理解。  mins代表最小数
      
    mov ax,x      ;假设x为当前最小值 
    cmp ax,y
    JL axyb       ;ax小于bx
    mov ax,y      ;y更小
    cmp ax,z 
    JL mins       ;y<z,且y<x,因此y最小    
       ;否则
    mov ax,z      ;将z赋值给ax  
    JL mins       ;跳转到mins
axyb:cmp ax,z
     JL mins      ;最小值是x
     ;否则    
      mov ax,z    ;最小值是z
     
mins:mov min,ax;ax最小   
  
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

例3:将键盘输入的小写字母转化为大写字母并显示出来

实现代码

; multi-segment executable file template.

data segment

ends


code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
    
    mov AH,1
    INT 21H 
    cmp AL,'a'
    JB stop
    cmp AL,'z'
    JA stop
    
    mov BL,AL        
    SUB BL,20H       
    mov AH,2
    INT 21H              
    
stop: mov ax, 4c00h ; exit to operating system.
    int 21h

   
mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

例4:编写一段程序,计算下列函数值。X,Y是有符号字变量。请添加图片描述

实现代码

; multi-segment executable file template.

data segment  
    
X DW 234      ;这里可以改变X的大小
Y DW ?
 
ends


code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    mov ax,X
    cmp ax,0
    jge case23  ;当x大于等于0
    add ax,10      ;当x小于0
    jmp bcjg;
        
case23:cmp ax,10 
       jg case3  ;X大于10
       mov bx,30
       mul bx
       jmp bcjg
              
case3:sub ax,190
    
bcjg:mov y,ax 
   
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

例5:设内存单元DATA存放一字节无符号数,编程将其拆成二个一位十六进制数,HEX单元存放低位十六进制数,HEX+1单元存放高位十六进制数。

实现代码

; multi-segment executable file template.

data segment

ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    MOV AH,1
    INT 21H   
    
    CMP AL,1BH
    JZ LP_END      ;输入的是ESC,程序退出   
    
    CMP AL,41H
    JC  output      ;字母不变去显示
    CMP AL,5CH                  
    JNC output     ;字母不是大写字母       
    ADD AL,20H     ;给字母是大写,所以要先增肥
    JMP output     ;增肥后去显示
       
        
        
output:MOV DL,AL
       MOV AH,2
       INT 21H 
       
LP_END:mov ax, 4c00h ; exit to operating system.
       int 21h     
    
       mov ax, 4c00h ; exit to operating system.
       int 21h 
ends

end start ; set entry point and stop the assembler.
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值