【发布时间】:2016-08-28 09:03:23
【问题描述】:
我试图构建一个汇编代码,它要求一个字符串,从打印字符串的位置开始,以及要打印的所需长度。 假设开始和长度总是有效的你能帮我确定开始和长度吗?
它应该如何工作:
Enter String: Hello World
Enter Start: 3
Enter Length: 5
Mid-String: llo W
所以我对如何确定字符串的开头和长度有疑问。我尝试了以下代码中显示的几件事:
.model small
.stack
.data
msg1 db "Enter String:$"
msg2 db 13,10,"Enter Start:$"
msg3 db 13,10,"Enter Length:$"
msg4 db 13,10,"Mid-String:$"
nwln db 13,10
mySample label byte
maxlen db 10
actlen db 0
string db 19 dup (?)
.code
mov ax,@data
mov ds,ax
lea dx, msg1 ;print msg1
mov ah,9
int 21h
lea dx,mySample ;accept string
mov ah,0Ah
int 21h
mov bh,0
mov bl,maxlen
mov string[bx],'$'
mov ah,9
lea dx,string ;print string accept
int 21h
lea dx, msg2 ;print msg2 and accept start
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov bh,0
mov bl,al
lea dx, msg3 ;print msg3 and accept length
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov dl,al
;mov maxlen,dl
mov bh,0
mov bl,maxlen
mov string[bx],'$'
lea dx,msg4 ;print msg4
mov ah,9
int 21h
lea dx,string ;print mid-string
int 21h
mov ah,4ch
int 21h
END
【问题讨论】:
-
当您在调试器中单步执行此操作时,您读入的数字实际上是否像您期望的那样最终出现在寄存器中?最后一个
int 21h之前的寄存器中的值是您期望的吗?如果没有,请向后工作,找出事情首先停止按预期运行的位置。 -
Chouny,你的问题有新答案了,看看吧!
标签: assembly x86 dos tasm x86-16