8086汇编 完成代码 用dosbox能运行的 从键盘输入一个十进制浮点数 x,范围为 0~1000。小数部分宽度最多为 2 位。请将 x 取整(忽略小数部分),并将取整后的数值乘以3,输出结果
时间: 2024-03-03 20:53:21 浏览: 86
下面是一个使用 DOSBox 运行的 8086 汇编程序,它从键盘读入一个十进制浮点数,将其取整并乘以 3,最后将结果输出到屏幕上:
```
.model small
.stack 100h
.data
prompt db 'Please enter a decimal number (0-1000): $'
result db 'Result: $'
buffer db 10, 0 ; 用于存储输入的字符串
num db 0 ; 存储整数部分
count db 0 ; 计数器,用于统计小数点后的位数
temp db 0 ; 存储输入的字符
.code
mov ax, @data
mov ds, ax
; 输出提示信息
mov ah, 9
lea dx, prompt
int 21h
; 读入字符串
mov ah, 0Ah
lea dx, buffer
int 21h
; 解析字符串,取整
mov si, offset buffer+2 ; 跳过缓冲区的长度信息
mov cl, [si] ; 获取小数点的位置
mov ch, 0 ; 高位清零
sub si, cx ; 指向整数部分的第一个字符
mov cl, [si] ; 获取整数部分的第一位
sub cl, 30h ; 转换为数字
mov num, cl ; 存储到 num 中
inc si ; 指向下一个字符
mov cl, [si] ; 获取小数点后的第一位
cmp cl, 0 ; 如果没有小数部分,则直接跳转到输出结果
je output_result
sub cl, 30h ; 转换为数字
mov count, 1 ; 计数器加 1
inc si ; 指向下一个字符
; 解析小数部分,最多只能有两位
mov cl, [si]
cmp cl, 0
je output_result
sub cl, 30h ; 转换为数字
mov bl, cl ; 存储到 bl 中
inc si ; 指向下一个字符
mov cl, [si]
cmp cl, 0
je output_result
sub cl, 30h ; 转换为数字
mov bh, cl ; 存储到 bh 中
inc si ; 指向下一个字符
cmp byte ptr [si], 0
jne output_result ; 如果还有多余的字符,则直接跳转到输出结果
; 取整并乘以 3
mov ax, num
shl ax, 1 ; num = num * 2
add ax, num ; num = num * 3
mov num, al ; 存储低字节到 num 中
output_result:
; 输出结果
mov ah, 9
lea dx, result
int 21h
mov ah, 2
mov dl, num
add dl, 30h
int 21h
mov ah, 4Ch
int 21h
end
```
注意,这个程序假设输入的字符串格式符合要求,即整数部分和小数部分之间只有一个小数点,并且小数部分的宽度最多为 2 位。如果输入的字符串格式不正确,程序的行为是未定义的。
阅读全文