📜  8086程序打印一个16位十进制数(1)

📅  最后修改于: 2023-12-03 14:38:54.377000             🧑  作者: Mango

8086程序打印一个16位十进制数

简介

本文介绍如何使用8086汇编语言编写程序来打印一个16位十进制数。8086是一种x86微处理器家族的早期成员,广泛用于个人电脑上的DOS操作系统。

程序代码

下面是一个简单的8086程序,可以从内存中读取一个16位的十进制数,并将其打印到屏幕上。

.model small
.stack 100h

.data
msg db 0ah, 0dh, 'The decimal number is: $'
num dw 12345

.code
main proc
    mov ax, @data
    mov ds, ax

    lea dx, msg
    mov ah, 9
    int 21h

    xor dl, dl

print_digit:
    mov ax, num
    mov bx, 10
    div bx

    add dl, '0'
    push dx

    cmp ax, 0
    jz print_digits

    jmp print_digit

print_digits:
    pop dx

    mov ah, 2
    int 21h

    xor ax, ax
    xor dx, dx

    add dl, '0'
    mov ah, 2
    int 21h

    jmp main

main endp
end main
解释

下面是对程序中每个部分的解释:

  • .model small:指定程序的内存模型为“small”。
  • .stack 100h:分配100h的内存用作栈空间。
  • .data:声明程序使用的静态数据。
  • msg db 0ah, 0dh, 'The decimal number is: $':用于存储要打印的消息的字符数组。
  • num dw 12345:要打印的16位十进制数,以十进制表示。
  • .code:指定以下内容为代码段。
  • main proc:定义一个名为main的过程(程序入口点)。
  • mov ax, @data:将数据段地址加载到寄存器ax中。
  • mov ds, ax:将ax中的值存储到段寄存器ds中,以设置数据段。
  • lea dx, msg:将消息数组的地址加载到寄存器dx中。
  • mov ah, 9:将系统调用编号设置为9,用于打印文本。
  • int 21h:调用DOS系统中断21h,以便将文本消息打印到屏幕上。
  • xor dl, dl:将寄存器dl清零,以便保存余数。
  • print_digit::打印数字的循环开始。
  • mov ax, num:将要打印的数字加载到寄存器ax中。
  • mov bx, 10:将除数10加载到寄存器bx中,以便取余数。
  • div bx:将ax中的值除以bx,商存储在ax中,余数存储在dx中。
  • add dl, '0':将dl中的余数转换为ASCII字符。
  • push dx:将转换后的字符放入栈中。
  • cmp ax, 0:比较商的值是否为0。
  • jz print_digits:如果商为0,则跳转到打印数字的循环结束。
  • jmp print_digit:否则,跳转回打印数字的循环开始。
  • print_digits::打印数字的循环结束。
  • pop dx:从栈中取出要打印的字符。
  • mov ah, 2:将系统调用编号设置为2,用于打印字符。
  • int 21h:调用DOS系统中断21h,以便将字符打印到屏幕上。
  • xor ax, ax:将寄存器ax清零。
  • xor dx, dx:将寄存器dx清零。
  • add dl, '0':将dl中保存的十位数转换为ASCII字符。
  • mov ah, 2:将系统调用编号设置为2,用于打印字符。
  • int 21h:调用DOS系统中断21h,以便将字符打印到屏幕上。
  • jmp main:跳转回程序的开头,以便重新打印数字。
使用方法

将上述程序保存为.asm文件,并使用8086汇编编译器进行编译。然后,将生成的可执行文件运行,即可在屏幕上看到打印的16位十进制数。

结论

本文介绍了如何使用8086汇编语言编写一个简单的程序来打印一个16位十进制数。通过理解程序中的每个部分,以及如何使用8086汇编来与DOS系统进行交互,读者可以更深入地了解8086程序设计的基础知识。