• 8086汇编语言程序设计——循环


    循环程序例子

    示例 在5行16列上用写显存方法显示多彩字符串。用循环指令实现。

    设计思路:
    (1) 用DH存放行号,DL存放列号;
    (2) BL存放字符属性,第1个字符的属性为4,红色;其他字符按属性+1改变;
    (3) 字符的位置计算公式:行号×160+列号×2;
    (4) 用循环指令LOOP实现将多彩字符串循环写入显存 。

    代码:

     ;a.asm                         在5行16列上用写显存方法显示多彩字符串。
    data segment
    a1 db 'Hello world!'
    a2 db 0
    data ends
    code segment
    assume cs:code,ds:data
    start:
    mov ax,data
    mov ds,ax
    mov dh,5                            ;
    mov dl,16                            ;
    mov bl,4                            ;颜色属性
    mov si,0
    show_str:
    mov ax,0b800h                        ;显存首址
    mov es,ax
    mov ax,160    
    mul dh                                ;行号×160
    mov di,ax                                   ;起始行位置
    sal dl,1                            ;列号×2,2个字节单元为1列
    mov dh,0
    add di,dx                            ;行列相加
    mov cx,a2-a1                        ;字符串长度
    let1: mov al,[si]                            ;循环写字符和属性到显存
    mov es:[di],al
    mov byte ptr es:[di+1],bl
    inc si
    inc bl                                ;属性加1
    add di,2                            ;写完即显示完
    loop let1                            ;循环指令
    mov ah,4ch
    int 21h
    code ends
    end start

    排序

    冒泡排序,使用双重循环。

    设计思路:
    (1) 用两条LOOP指令实现双重循环时,对CX寄存器有冲突。采用PUSH CX指令将外循环的CX值入栈保存,内循环的LOOP结束后,再将外循环的CX恢复
    (2) 用寄存器相对寻址取出两数进行比较。
    程序框图:

    代码:

    ; b.asm  将字数组part按升序排序  
    data segment
    part dw 15,32,6,-27,8
    sign dw  ?
    data ends
    code segment
    assume cs:code,ds:data
    start:
    mov ax,data
    mov ds,ax
    mov cx,sign-part            ;数组长度
    shr cx,1                     ;元素个数
    dec cx
    loop1:                            ;外循环
    push cx                        ;保存外循环次数
    mov bx,0
    loop2:                            ;内循环
    mov ax,part[bx]
    cmp ax,part[bx+2]            ;比较大小
    jle next                    ;升序
    xchg ax,part[bx+2]            ;交换
    mov part[bx],ax
    next:add bx,2
    loop loop2
    pop cx                        ;恢复外循环次数
    loop loop1
    mov ah,4ch
    int 21h
    code ends
    end start
  • 相关阅读:
    学习C++的第一天
    2016.12.28
    无主之地
    一种排序
    街区最短问题
    配对类问题
    蛇形填数
    c#unity
    贪心
    台阶
  • 原文地址:https://www.cnblogs.com/lfri/p/10785026.html
Copyright © 2020-2023  润新知