assembly 将寄存器压入内存堆栈

8mmmxcuj  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(168)

当我们将一个寄存器压入内存堆栈时,它使我们能够做什么?它只是帮助我们执行不适合AL、AH寄存器的操作吗?
我必须为一台具有x8086处理器的计算机编写一个程序,并且必须找到35600秒的等效时间(以小时为单位),因此AL、AH寄存器太小,无法执行除法35600/3600

xam8gpfp

xam8gpfp1#

使用push可以做很多事情:

  • 存储值以便以后使用。

在8086上,你只能通过1或CL寄存器中的值进行位移位或循环移位。如果你使用CX作为循环计数器,但你试图在循环中进行位移位,这可能会成为一个问题。所以你可以用下面的方法来解决这个问题:

foo:
push cx
   mov al,[si]
   mov cl,2
   shl al,cl
   mov [di],al
pop cx
loop foo
  • 反转字符串中字母的顺序。
.data
myString db "Hello",0
.code

mov si,offset myString
mov ax,0
mov cx,0
cld

stringReverse:
lodsb          ;read the letter (and inc si to the next letter)
cmp al,0       ;is it zero
jz nowReverse  ;if so, reverse the string
push ax        ;push the letter onto the stack
inc cx         ;increment our counter
jmp stringReverse

nowReverse:
mov si,offset myString  ;reload the pointer to the first letter in myString

loop_nowReverse:
jcxz done               ;once we've written all the letters, stop.
pop ax                  ;get the letters back in reverse order
stosb                   ;overwrite the old string
dec cx                  
jmp loop_nowReverse
done:

相关问题