با سلام،
بفرمایید:
.model small
.stack 64h
.data
string db 'test',0
lenght dw ?
.code
main proc far
mov ax,@data
mov ds,ax
lea bx,String
mov si,-1
_while:
inc si
cmp [bx+si],0
jnz _while
;sub si,offset str
mov lenght,si
mov ah,8h
int 21h
mov ax,4c00h
int 21h
main endp
end main
چند تا نکته:
نکته ی مهم در آدرس دهی رشته اس! شما باید آدرس رو در یه ثبات بذارید مثل bx (با Offset هم می شه به جای lea) و با یه ثبات دیگه تو رشته حرکت کنید. مقدار si از 0 تا پایان رشته این کار رو می کنه! تغییرات دیگه ی حلقه هم برای کم شدن تعداد label ها بود!
نمی دونم تو EMU (اگه هنوز ازش استفاده می کنید!) لازمه که ds مقداردهی اولیه بشه یا با سرویس 4c به سیستم برگشت داده بشه، اما تو Masm باید باشن!
سرویس 8h هم همون getch اه!
در مورد کلیات دیگه هم تو EMU بلد نیستم، مثل اون startup و exit!
اگه از نرم افزاری مثل ++Notepad استفاده کنید کلمات مورد استفاده در زبان رو با رنگ های مختلف نشون می ده که بهتره از اونا استفاده نکنید، مثل while و str!