汇编语言与微机原理实验一、实验二、实验三:分支程序设计/循环程序设计/子程序设计

简介: 汇编语言与微机原理实验一、实验二、实验三:分支程序设计/循环程序设计/子程序设计

实验一 分支程序设计

实验要求:

统计有符号字节数组中负数和非负数的个数

实验代码

org 100h
  .MODEL TINY
  .STACK 100
  .DATA 
arr db -10,0,127,-128,63,67,8,-16,1,2
negcnt db 0
poscnt db 0
  .CODE
start: mov ax,@data
  mov ds,ax
  mov es,ax
  mov cx,10   ;数组长度为10
  lea bx,arr    ;bx指向arr
  mov negcnt,0    ;负数0个
  mov poscnt,0    ;非负数0个
  mov dx,0
loopst: cmp cx,0
  jle loopend
  cmp dx,[bx] ;比较0和bx指向的数大小
  jg label2
  inc poscnt    ;非负数计数
  jmp exit
label2: inc negcnt    ;负数计数
exit: dec cx
  inc bx
  jmp loopst
loopend:jmp $
  end start
ret

实验二 循环程序设计

实验要求

采用冒泡排序法对长度为20的字数据进行递增排序。

实验代码

org 100h
  .MODEL TINY
  .STACK 100
  .DATA 
arr dw -128,127,-1,0,1,129,-129,32767,-32768,32766,-32767,1,0,1024,-1023,16384,45,-46,-5,6
len equ 20
    .CODE
start: mov ax,@data
  mov ds,ax
  mov es,ax
    mov cx,len-1
loop1:
    push cx
    mov bx,offset arr
loop2:
    mov dx,[bx]
    cmp dx,[bx+2]
    jle next
    xchg dx,[bx+2]
    xchg dx,[bx]
next:
    inc bx
    inc bx
    loop loop2
    pop cx
    loop loop1
    mov ax,4C00H
    jmp $
    end start
ret

实验三 子程序设计

实验要求:

选从键盘输入一个无符号整数,判断其是否是素数并在显示器上显示相关提示信息。判断一个数是否为素数的功能用子程序实现。

org 100h
  .MODEL TINY
  .STACK 100
  .DATA 
  msg1 db 'the number is a prime',0dh,0ah,'$'
  msg2 db 'the number is not a prime',0dh,0ah,'$'
  innum dw 0
  indig db 0 
  divnum db 0
  ten db 10           
  res db 0
  .CODE
start:
  mov ax,@data
  mov ds,ax
  mov es,ax
  call input1;//输入
  call isp  ;//判断是否为素数
  mov ah,09h
  cmp res,0;//不是素数
  je exit3   
  mov dx,offset msg1;//是素数
  int 21h
  jmp exit4
exit3:
    mov dx,offset msg2;//不是素数,输出
    int 21h 
exit4:  jmp $
input1  proc near
  mov ax,0h
  mov innum,0h;//存储完整的输入数据
label1:
  mov ah,01h
  mov al,02h
  int 21h
  cmp al,'0'
  jl exit
  cmp al,'9'
  jg exit;//检测到了不是数字,说明数据输入完毕
  sub al,'0'
  mov indig,al;//indig表示当前数字的个位
  mov ax,innum;//之前输入过的数据innum*10后加当前个位,拼接得到当前数字
  mul ten
  mov innum,ax
  mov al,indig
    cbw
  add innum,ax;//拼接完成
  jmp label1;//输入下一位数字
exit:
  ret        
input1 endp
isp proc near
    mov ax,innum
    cmp ax,2
    jb exit0 ;//0和1不是素数
    je exit1;//2是素数
    mov divnum,2    ;//除数一开始为2
    mov cx,innum
    sub cx,1;//cx为输入数字-1,为循环最大值
loop1:
    push ax
    div divnum;//ax/divnum
    cmp ah,0;//余数为0,是合数
    jz exit0
    inc divnum   
    cmp divnum,cx 
    pop ax
    jb loop1
    jge exit1;//2~n-1的数都试过了,还除不尽,是素数
exit1:
    mov res,1
exit0:
    ret 
isp endp   
end start 
end


目录
相关文章
|
6月前
|
数据处理
MCS-51单片机汇编语言程序设计
MCS-51单片机汇编语言程序设计
167 0
|
6月前
|
C语言
【汇编语言实战】用循环求N个自然数之和
【汇编语言实战】用循环求N个自然数之和
31 2
|
6月前
|
存储 缓存 安全
learn_C_deep_9 (汇编角度理解return的含义、const 的各种应用场景、volatile 的基本理解与实验证明)
learn_C_deep_9 (汇编角度理解return的含义、const 的各种应用场景、volatile 的基本理解与实验证明)
第五章 汇编语言程序设计【微机原理】2
第五章 汇编语言程序设计【微机原理】2
254 0
第五章 汇编语言程序设计【微机原理】2
|
算法 vr&ar 网络架构
汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】
汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】
94 0
第五章 汇编语言程序设计【微机原理】1
第五章 汇编语言程序设计【微机原理】1
95 0
|
机器学习/深度学习 算法 数据格式
【微机原理笔记】第 4 章 - 8086 汇编语言程序设计
【微机原理笔记】第 4 章 - 8086 汇编语言程序设计
452 0
【8086汇编】《汇编语言(第三版)》实验一
需要用到的指令✨✨ 查看、修改CPU中寄存器的内容:R命令 查看内存中的内容:D命令 修改内存中的内容:E命令(可以写入数据、指令,在内存中,它们实际上没有区别) 将内存中的内容解释为机器指令和对应的汇编指令:U命令 执行CS:IP指向的内存单元处的指令:T命令 以汇编指令的形式向内存中写入指令:A命令
汇编语言与微机原理实验五:键盘按键与数码管显示
汇编语言与微机原理实验五:键盘按键与数码管显示
212 0
汇编语言与微机原理实验四:8259单脉冲触发中断
汇编语言与微机原理实验四:8259单脉冲触发中断
156 0