操作系统开发 – 婴儿教程 8

本文提供了一个调整后的32位寄存器和偏移量的非BIOS屏幕打印示例,用于替换复杂的字符串指令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

32-bit printing

Here is the same non-BIOS screen print AsmExample as before, but adjusted to use 32-bit registers and offsets. The 'complex' string instructions have been replaced.

;----------------------
dochar:
    call cprint              ; print one character
sprint:
    mov eax, [esi]          ; string char to AL
    lea esi, [esi+1]
    cmp al, 0
    jne dochar               ; else, we're done
    add byte [ypos], 1       ; down one row
    mov byte [xpos], 0       ; back to left
    ret
 
cprint:
    mov ah, 0x0F             ; attrib = white on black
    mov ecx, eax             ; save char/attribute
    movzx eax, byte [ypos]
    mov edx, 160             ; 2 bytes (char/attrib)
    mul edx                  ; for 80 columns
    movzx ebx, byte [xpos]
    shl ebx, 1               ; times 2 to skip attrib
 
    mov edi, 0xb8000         ; start of video memory
    add edi, eax             ; add y offset
    add edi, ebx             ; add x offset
 
    mov eax, ecx             ; restore char/attribute
    mov word [ds:edi], ax
    add byte [xpos], 1       ; advance to right
 
    ret
 
;------------------------------------
 
printreg32:
    mov edi, outstr32
    mov eax, [reg32]
    mov esi, hexstr
    mov ecx, 8               ; eight nibbles
 
hexloop:
    rol eax, 4               ; leftmost will
    mov ebx, eax             ; become rightmost
    and ebx, 0x0f ;
    mov bl, [esi + ebx]      ; index into hexstr
    mov [edi], bl
    inc edi
    dec ecx
    jnz hexloop
 
    mov esi, outstr32
    call sprint
 
    ret
 
;------------------------------------
 
xpos db 0
ypos db 0
hexstr db '0123456789ABCDEF'
outstr32 db '00000000', 0    ; register value
reg32 dd 0                   ; pass values to printreg32
 
;------------------------------------
ybaseSQLAnywhere是Sybase公司开发的一种小型数据库产品,有单用户版和多用户版,Sybase Sql Anywhere (ASA)现在应用很广泛,主要用于单机版的管理系统中,如:“顶尖酒店管理信息系统” ,“浪潮财务软件(SQL Anywhere版)”及一些足浴、图书管理、汽修、会员系统等,数据库如:jd.db,LCCS.db,cwbase.db,wlda.db,leader.db,tctn_web.db,ais02.db,qxqp.db,muzu_jl.db, zl_pos.db,haird40.db等,因为ASA是在使用过程中,经常会出现损坏的情况,而市面上也没有ASA数据库修复工具,所以西西推出浪潮官方的修复单机版数据库sybase sqlanywhere的工具。 软件功能: 1.因为物理磁盘故障,如硬盘坏道或固件磁头损坏造成Sybase SQL Anywhere 数据库无法打开 2.由于在使用过程中突然断电造成的数据库无法打开 3.由于操作系统或其它方面的故障导致数据库无法打开 使用方法: 1、将dbrepair.exe复制到数据库目录下 例如:d:\cwdata,在dos方式下执行以下语句。 2、d:\cwdata>dbrepair -k d:\cwdata\cwbase1.db 将错误页号(xxxx)记下 3、d:\cwdata>dbrepair -z xxxx d:\cwdata\cwbase1.db OK,问题通过 手动命令恢复: 用Sybase提供的dbtranw.exe,DB32W.EXE,rtsqlw.exe等实用程序来完成恢复工作,步骤如下表。 步骤命令功能 : 1.Dbtranw -r-k-y mydb.logdb.sql把.log 文件的内容转换成的SQL语句 2.Attrib -r mydb.db 修改只读文件mydb.db的属性为可写 3.Attrib -r mydb.log
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值