【问题标题】:Stopwatch program in 8086 assembly [closed]8086汇编中的秒表程序[关闭]
【发布时间】:2016-04-09 18:23:07
【问题描述】:

我正在编写一个程序以在 60 秒延迟内打印 00 到 60!但不知何故它不起作用!你们能帮忙吗?

org 100h

.model small
.stack 100h
.data 
  a db 0
  b db 0
.code 
  main PROC
    mov cx,100 
  secnd:
    mov bl,a
    add bl,48
    mov bh,b
    add bh,48
    mov ah,2
    mov dl,bl
    int 21h

    mov ah,2
    mov dh,bh
    int 21h

    mov ah,2
    mov dl,0dh
    int 21h

    mov dl,0ah
    int 21h 

    MOV  CX, 0FH
    MOV  DX, 4240H
    MOV  AH, 86H
    INT  15H

    inc a
  loop secnd
    ret

【问题讨论】:

    标签: assembly x86 dos real-mode


    【解决方案1】:

    你的程序有几个问题:

    • 由于 BIOS 调用使用 CX 作为其参数之一,您实际上已经破坏了您的循环控制变量! push/pop它:

       mov  cx,100 
      secnd:
       PUSH CX
       ...
       POP  CX
       loop secnd
       ret
      
    • 您将 a 变量视为十分之一,将 b 变量视为单位,但您仅使用单个 inc a 更改前一个变量。
      您可以选择这种方法:

       ...
       inc b
       cmp b,10
       jb  done
       mov b,0
       inc a
      done:
       POP  CX
       loop secnd
       ret
      

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多