以下是计算字符串长度的代码,然后使用 nasm 汇编语言在 dosbox 中打印它,但它给出了逻辑错误,并且在 dosbox 上运行它后我卡住了,然后我必须重新打开它才能运行 .asm再次归档 以下是代码 组织0x0100 跳转开始
msg:db“Aurangzaib Awan”,0 消息长度:dw 0
;清屏子程序 清除屏幕: 推 es 推斧 推CX 推迪
mov ax, 0x0b800
mov es, ax
mov ax, 0x0720
mov cx, 2000
rep stosw
pop di
pop cx
pop ax
pop es
ret
;计算字符串长度的子程序 校准长度: 推BP 移动 bp, sp 推斧 推CX 推斯 推迪
mov di, [bp + 4]
mov cx, 0xffff ; load a big num in cx
xor al, al
repne scasb
mov ax, 0xffff
sub ax, cx
dec ax
mov word [msgLen], ax
pop di
pop si
pop cx
pop ax
pop ax
pop bp
ret 2
;打印字符串的子程序 密斯特: 推BP 移动 bp, sp 推 es 推斧 推CX 推斯 推迪
mov ax, 0xb800
mov es, ax
mov ax, 80
mul byte [bp + 6] ; y pos
add ax, [bp + 8] ; x pos
mov di, ax
mov si, [bp + 10]
mov cx, [msgLen]
mov ax, [bp + 4] ; attribute
cld
nextChar:
lodsb
stosw
loop nextChar
pop di
pop si
pop cx
pop ax
pop ax
pop es
pop bp
ret 10
开始:
调用 clrscreen
mov 斧头, 味精
推斧
致电 cal_Len
mov 斧头, 味精
推斧
移动斧头,30; x 位置
推斧
移动斧头,20; y 位置
推斧
移动斧头,1;属性
推斧
打电话给mystr
mov ax, 0x4c00
int 0x21
我只是想让它在 dosbox 上打印消息
以下是错误列表:
pop ax
太多。ret 8
而不是 ret 10
返回。lodsb
指令覆盖。将属性移至AH:mov ah, [bp+4]
。mov di, ax
add di, ax
。