鱼C论坛

 找回密码
 立即注册
查看: 95|回复: 1

[技术交流] 实验10(3)正确版本

[复制链接]
发表于 2025-3-6 17:11:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
经过一天的测试,修改,终于搞定实验10(3)的拓展版。现分享交流。


assume cs:code

data segment
    db 10 dup(0)
data ends

code segment

start:
    mov bx, data
    mov ds, bx
    mov dx, 65432
    mov ax, 12345
    mov di, 10
    mov si, 0

    call dtoc

    mov dh, 8 ;8行
    mov dl, 3 ;3列
    mov cl, 2 ;字符属性

    call show_str
       
    mov ax, 4c00h
    int 21h

dtoc:
    mov si, 9 ; 从数据段最大偏移地址开始保存数据
    mov di, 10 ; 这里使用di用于除数操作,每次除10

    mov cx, dx
    jcxz dx_is0 ;如果dx=0,只需考虑ax
    push dx
    call loopfive
    pop dx
    mov ax, dx
    jmp unknowloop

dx_is0:
    mov cx, ax
    jcxz num_is0 ; 当数字为0时
    jmp unknowloop

num_is0:
    mov dl, 0
    add dl, 30h
    mov ds:[si],dl
    ret

unknowloop: ;当高16位dx为0,或者把高16位dx给ax后,因此时ax位数未知,将调用此代码
    mov dx,0
        div di
    add dl, 30h
    mov ds:[si],dl
    mov cx, ax
    jcxz retpoint
    dec si
    jmp short unknowloop

loopfive:    ;当高16位dx !=0 时,低16位ax必须取数字5次
    mov cx, 5t
five:
        mov dx,0  ;因为只是对低16位ax进行除法运算,所以循环前要把高16位置0
    div di
    add dl, 30h
    mov ds:[si], dl
    dec si
    loop five
    ret

show_str:
    mov ax, 0b800h
    mov es, ax

        mov ah,0
    mov al, 160
    mul dh
    mov di, ax
    mov al, 2
    mul dl
    add di, ax

    mov al, cl
       
save_str:
        mov cx,10
    sub cx, si
    jcxz retpoint
    mov dl,[si]
    mov es:[di], dl
    mov es:[di].1, al
    inc si
    add di,2
    jmp short save_str

retpoint:        ret
code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-3-6 17:12:11 | 显示全部楼层
感谢您分享实验程序的拓展版本!根据您的代码分享,我将提供简要点评以帮助其他用户理解这个代码结构和功能。以下是一个对您的代码结构的简单说明:

程序功能
  • 这个程序实现了一个将数值转换为字符串并显示在屏幕上的功能。
  • 使用了16位汇编进行实现,模拟了将整数转换为十进制字符串并在终端上显示。


代码结构
  • data segment:用于定义要用到的数据空间。
  • code segment:程序逻辑的主体,包含功能函数。
  • dtoc:将数值转换为字符数组的函数。
  • show_str:负责将转换后的字符串显示到屏幕上。
  • retpoint:程序返回点,控制程序流返回。


注意事项
  • 确保数据段和代码段正确管理,以避免段寄存器和偏移的错误使用。
  • 处理字符串显示的逻辑中注意有无字符属性设置及显示偏移。
  • 在使用DOS功能调用时,需保证正确的中断设置。


有兴趣的朋友可以从代码中学习如何进行基本的十进制转字符处理,并结合其他功能模块进行扩展。有什么技术问题或者需要的更详细的解释,欢迎随时讨论交流!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-3-31 08:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表