8086 dosbox可运行 从键盘输入一个十进制浮点数 x,范围为 0~1000。小数部分宽度最多为 2 位。请将 x 取整(向下取整),并将取整后的数值乘以3。在输入和输出信息前需有提示。
时间: 2024-03-04 08:49:08 浏览: 153
十进制的数转换成单精度的浮点数.rar
下面是一个简单的汇编程序,可以在 DOSBox 中运行,实现从键盘输入一个十进制浮点数 x,取整并乘以 3,最后输出结果。
```
.model small
.stack 100h
.data
prompt db "Please input a decimal floating-point number between 0 and 1000: $"
result db "The result is: $"
x db 10, ?, 2 dup ('$') ; 存储输入的浮点数
y dw 0 ; 存储取整后的整数部分
z dw 0 ; 存储计算结果
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
; 输出提示信息
mov ah, 9
lea dx, prompt
int 21h
; 读取浮点数 x
mov ah, 0Ah
lea dx, x
int 21h
; 将浮点数 x 转换为整数部分存储到 y 中
mov ax, word ptr x + 2
mov bx, 10
mul bx
mov bl, byte ptr x
sub bl, '0'
add ax, bx
mov y, ax
; 计算结果并存储到 z 中
mov ax, y
mov bx, 3
mul bx
mov z, ax
; 输出结果
mov ah, 9
lea dx, result
int 21h
mov ah, 2
mov al, ' '
int 21h
mov ax, z
call print_decimal
; 程序结束
mov ah, 4Ch
int 21h
main endp
; 子程序:将一个十进制整数转换为字符串并输出
; 输入:AX 中存储要转换的整数
print_decimal proc
push bx
push cx
push dx
mov bx, 10 ; 除数
mov cx, 0 ; 位数计数器
cmp ax, 0
jz .done ; 特判 x = 0 的情况
.loop:
xor dx, dx
div bx ; AX = AX / BX, DX = AX % BX
push dx ; 将余数入栈
inc cx ; 位数加 1
cmp ax, 0
jnz .loop
.done:
; 将栈中的数字取出,转换为字符并输出
mov ah, 2
pop dx
add dl, '0'
int 21h
dec cx
jz .exit
jmp .next
.next:
pop dx
add dl, '0'
int 21h
dec cx
jz .exit
jmp .next
.exit:
pop dx
pop cx
pop bx
ret
print_decimal endp
end main
```
该程序使用 DOS 中断 21h 来进行输入输出操作,使用了一个子程序 `print_decimal` 来将整数转换为字符串并输出。在程序中,首先输出提示信息,然后使用 DOS 中断 21h 的 0Ah 功能读取一个带有小数部分的浮点数 x,将其转换为整数部分存储到 y 中,再将 y 乘以 3 得到结果 z,最后使用 `print_decimal` 子程序将 z 输出。注意,由于 DOS 中断 21h 的 0Ah 功能不能直接读取带有小数部分的浮点数,因此在程序中将其存储为字符串,并手动转换为整数。
阅读全文