回覆列表
  • 1 # 你永遠追不上的巨人

    可以透過四種方式交換兩個暫存器資料:1. 使用棧作為中間變數SSEG SEGMENT STACK DB 32 DUP (?)SSEG ENDSCSEG SEGMENT assume CS:CSEG, SS:SSEGMain: mov AX, SSEG mov SS, AX mov SP, 32h ; 初始化棧段及棧指標 mov AX, 4500h mov BX, 5400h ; 因一個棧單元為16位,故需要將AX和BX作為整體存放 ; AL和BL的值可以設定成任意(0-ffh) push AX push BX pop AX pop BX mov AH, 4ch ; 21h中斷,返回DOS int 21hCSEG ENDS END Main2. 在非棧儲存空間中使用中間變數DSEG SEGMENT Value DB 8 DUP (?) DSEG ENDSCSEG SEGMENT assume CS:SCEG, DS:DSEG Main: mov AX, DSEG mov DS, AX mov SI, OFFSET Value ; 設定DS:SI指向中間變數 mov AH, 45 mov BH, 54 mov BYTE PTR [SI], AH ; AH -> Value mov AH, BH ; BH -> AH mov BH, BYTE PTR [SI] ; Value -> BH mov AH, 4ch int 21hCSEG ENDS END Main3. 使用交換指令CSEG SEGMENT assume CS:CSEGMain: mov AH, 45 mov BH, 54 xchg AH, BH mov AH, 4ch int 21hCSEG ENDS END Main4. 使用除AH和BH的任意八位通用暫存器交換資料CSEG SEGMENT assume CS:CSEGMain: mov AH, 45 mov BH, 54 mov CH, AH mov AH, BH mov CH, BH mov AH, 4ch int 21hCSEG ENDS END Main因返回作業系統前,AH作為入口引數,其值已經發生改變,故只能在debug下檢視執行結果。否則需要修改21h號DOS功能呼叫的入口引數。

  • 中秋節和大豐收的關聯?
  • 慈溪201公交車時間表?