汇编代码有段不太理解,高手给解释下吧
书中说这个函数的作用是模拟一个回车的显示。那个高手给详细的解释下。汇编学得不好。谢谢了DispReturn:pusheaxpushebxmoveax,edimovbl,1...
书中说这个函数的作用是模拟一个回车的显示。那个高手给详细的解释下。汇编 学得不好。谢谢了
DispReturn:
push eax
push ebx
mov eax, edi
mov bl, 160
div bl
and eax, 0FFh
inc eax
mov bl, 160
mul bl
mov edi, eax
pop ebx
pop eax
ret 展开
DispReturn:
push eax
push ebx
mov eax, edi
mov bl, 160
div bl
and eax, 0FFh
inc eax
mov bl, 160
mul bl
mov edi, eax
pop ebx
pop eax
ret 展开
展开全部
DispReturn:
push eax ; 因为后面要用到eax,这里先保存eax中原来的值
push ebx ; 因为后面要用到bl,这里先保存ebx中原来的值
mov eax, edi ; eax = edi
mov bl, 160
div bl ; al = ax / 160, ah = ax mod 160
and eax, 0FFh ; 只保留eax中后8位,即 eax = al
inc eax ; eax = eax + 1
mov bl, 160
mul bl ; ax = ax * 160
mov edi, eax ; edi = ax
pop ebx ; 恢复ebx原来的值
pop eax ; 恢复eax原来的值
ret
所以,这段程序的功能是:
计算 edi = ( edi / 160(保留最后8位)+ 1) * 160
至于为啥是模拟回车,这个可能与调用它的程序有关吧:
猜测如下:
edi是指向当前文本位置,每行有160个字符。
那么调用这个函数后,就是把指针指向了下一行的开始,相当于打了一个回车。
push eax ; 因为后面要用到eax,这里先保存eax中原来的值
push ebx ; 因为后面要用到bl,这里先保存ebx中原来的值
mov eax, edi ; eax = edi
mov bl, 160
div bl ; al = ax / 160, ah = ax mod 160
and eax, 0FFh ; 只保留eax中后8位,即 eax = al
inc eax ; eax = eax + 1
mov bl, 160
mul bl ; ax = ax * 160
mov edi, eax ; edi = ax
pop ebx ; 恢复ebx原来的值
pop eax ; 恢复eax原来的值
ret
所以,这段程序的功能是:
计算 edi = ( edi / 160(保留最后8位)+ 1) * 160
至于为啥是模拟回车,这个可能与调用它的程序有关吧:
猜测如下:
edi是指向当前文本位置,每行有160个字符。
那么调用这个函数后,就是把指针指向了下一行的开始,相当于打了一个回车。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询