• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于WINDOWS平臺(tái)下匯編語言程序上機(jī)中的問題探究

      2017-02-24 20:40:42彭茜珍揭愛明
      關(guān)鍵詞:匯編語言調(diào)用湖北

      彭茜珍,揭愛明

      (1.湖北科技學(xué)院 學(xué)報(bào)編輯部,湖北 咸寧 437100;2.湖北新產(chǎn)業(yè)技師學(xué)院,湖北 咸寧 437100)

      基于WINDOWS平臺(tái)下匯編語言程序上機(jī)中的問題探究

      彭茜珍1,揭愛明2

      (1.湖北科技學(xué)院 學(xué)報(bào)編輯部,湖北 咸寧 437100;2.湖北新產(chǎn)業(yè)技師學(xué)院,湖北 咸寧 437100)

      在我國(guó)大學(xué)開設(shè)的匯編語言程序設(shè)計(jì)這門課的實(shí)踐環(huán)節(jié)中,大多都是在Windows平臺(tái)下,使用微軟的MASM宏匯編程序作為開發(fā)工具,但在上機(jī)實(shí)踐過程中或多或少會(huì)出現(xiàn)一些問題,給學(xué)生和老師帶來很大的麻煩,為了解決這些問題,文章研究了這些問題出現(xiàn)的原因和解決方法。

      MASM匯編程序;INTEL處理器指令系統(tǒng);WINDOWS平臺(tái)

      在Intel公司生產(chǎn)的CPU上,其指令系統(tǒng)從最初的80X86、MMX、SSE系列[1,2],發(fā)展到現(xiàn)在的VAX、VAX2和VAX512[3,4]以及一些特定指令系統(tǒng)[5],并且在計(jì)算機(jī)業(yè)界內(nèi)被廣泛使用。

      現(xiàn)代Intel CPU的工作模式包括實(shí)模式、32位分段保護(hù)模式、32位分頁(yè)保護(hù)模式、虛擬8086模式、擴(kuò)展虛擬8086模式、IA-32e分頁(yè)模式,其體系結(jié)構(gòu)從開始的8位、16位、32位到現(xiàn)在的64位,能夠處理的整數(shù)有8位、16位、32位、64位、128位、256位和512位,能夠處理的實(shí)數(shù)包括單精度實(shí)型、雙精度實(shí)型和擴(kuò)展雙單精度實(shí)型,還可以處理各種打包的整數(shù)和實(shí)數(shù),功能非常強(qiáng)大。

      微軟公司生產(chǎn)的宏匯編程序MASM已從5.0、6.0版發(fā)展到現(xiàn)在14.0版,其新版匯編的源程序可以在最新的Windows平臺(tái)下運(yùn)行。

      Windows平臺(tái)已從Windows98、Windows2000、Windows XP、Windows7、Windows8到Windows10。結(jié)構(gòu)體系包括32位Windows和64位Windows。

      在我國(guó)大學(xué)計(jì)算機(jī)專業(yè)開設(shè)的匯編語言程序設(shè)計(jì)這門課程中,不少學(xué)校以Intel CPU為背景進(jìn)行講授,內(nèi)容多半是在DOS系統(tǒng)下的80X86指令系統(tǒng)及程序設(shè)計(jì),CPU工作在實(shí)模式下,上機(jī)操作系統(tǒng)多半選用Windows XP,工作在32位下,開發(fā)工具多半采用MASM5.0或MASM6.0。在此條件下開發(fā)的匯編源程序不能充分利用現(xiàn)代環(huán)境下的硬件和OS的功能,而且其生成的可執(zhí)行文件在最新的Windows平臺(tái)上運(yùn)行時(shí)會(huì)出現(xiàn)問題,甚至不能運(yùn)行。例如下列匯編源程序:

      DATA SEGMENT

      CR EQU 0DH ;回車

      LF EQU 0AH ;換行

      szMES DB “HOW DO YOU DO?”,CR,LF,“HOW ARE YOU?”,“$”

      DATA ENDS

      CODE SEGMENT

      ASSUME CS:CODE,DS:DATA

      MAIN: MOV AX, DATA

      MOV DS, AX

      MOV DX, OFFSET szMES

      MOV AH, 9

      INT 21H

      MOV AH, 4CH

      INT 21H

      CODE ENDS

      END MAIN

      把它用MASM 5.0/6.0匯編之后,在WINDOWS7及之后的平臺(tái)下運(yùn)行就會(huì)出現(xiàn)問題,但使用新版的MASM 14.0對(duì)其進(jìn)行匯編又通不過。這就是上機(jī)實(shí)踐要解決問題之一。

      一、WINDOWS平臺(tái)下匯編源程序開發(fā)環(huán)境探討

      當(dāng)前的WINDOWS平臺(tái)至少是32位,CPU至少是Pentium4,但廣泛使用的卻是WINDOWS 64位平臺(tái),CPU都是Core(TM)i3/i5/i7。對(duì)于WINDOWS 7之前的平臺(tái),它們只工作在32位保護(hù)模式,前述的源程序匯編后可以很好地運(yùn)行,這是因?yàn)?2位保護(hù)模式支持虛擬8086模式,OS提供模擬DOS系統(tǒng)功能調(diào)用的驅(qū)動(dòng)程序。但是,對(duì)于WINDOWS 7及其之后的平臺(tái),它們工作在64位的IA-32e分頁(yè)模式,此模式不支持虛擬8086模式,OS也不提供模擬DOS系統(tǒng)功能調(diào)用的驅(qū)動(dòng)程序,前述的源程序匯編后不能正常運(yùn)行。

      前述源匯編程序無法用新版的MASM 14.0對(duì)其進(jìn)行匯編,原因是:(1)存儲(chǔ)模型不能使用DOS各種分段存儲(chǔ)模型,只能采用FLAT存儲(chǔ)模型;(2)在IA-32e分頁(yè)模式下,段基址是0000000000000000H,不可改變,程序中涉及改變段基址的指令通不過;(3)IA-32e分頁(yè)模式不支持DOS系統(tǒng)功能調(diào)用。

      新版的MASM 14.0匯編程序有兩種:ML.EXE和ML64.EXE。它們不但具有匯編功能,而且可以通過設(shè)置參數(shù)使其具有鏈接功能。[6,7]

      下面簡(jiǎn)述在現(xiàn)代WINDOWS 平臺(tái)下所提供的使用新版MASM 14.0進(jìn)行匯報(bào)語言程序設(shè)計(jì)的環(huán)境和要求:

      (1)x64本機(jī)工具命令提示(x64 on x64)環(huán)境:Vcvarsall.bat 參數(shù),amd64;CPU架構(gòu),X86-64;WINDOWS平臺(tái),64位Windows;EXE文件格式,WIN64;運(yùn)行方式,64位本機(jī)進(jìn)程運(yùn)行。

      (2)x64兼容工具命令提示(x64 on x86)環(huán)境:Vcvarsall.bat 參數(shù),x86_amd64;CPU架構(gòu),X86-32/X86-64;WINDOWS平臺(tái),32位Windows/64位Windows的WOW64下;EXE文件格式,WIN64;運(yùn)行方式,32位本機(jī)進(jìn)程運(yùn)行。

      (3)x64兼容工具命令提示(x64 on x64)環(huán)境:Vcvarsall.bat 參數(shù),amd64_x86;CPU架構(gòu),X86-64;WINDOWS平臺(tái),64位Windows;EXE文件格式,WIN32;運(yùn)行方式,64位本機(jī)進(jìn)程運(yùn)行。

      (4)x86本機(jī)工具命令提示(x86 on x86)環(huán)境:Vcvarsall.bat 參數(shù),X86;CPU架構(gòu),X86-32/ X86-64;WINDOWS平臺(tái),32位Windows/64位Windows的WOW64下;EXE文件格式,WIN32;運(yùn)行方式,32位本機(jī)進(jìn)程運(yùn)行。

      (5)開發(fā)人員命令提示環(huán)境:等同于x86 本機(jī)工具命令提示環(huán)境。

      通過在WINDOWS平臺(tái)下的純“命令提示符”窗口中運(yùn)行vcvarsall.bat,可設(shè)置環(huán)境變量以配置適用于32位或64位本機(jī)編譯的命令行,或適用于面向x86、x64處理器的交叉編譯的命令行。如果未提供任何參數(shù),vcvarsall.bat將配置環(huán)境變量以供使用面向x86的32位本機(jī)編譯器。

      二、現(xiàn)代匯編語言源程序格式研究

      要適應(yīng)在現(xiàn)代最新CPU架構(gòu)下WINDOWS平臺(tái)上編寫匯編語言源程序并通過新版MASM的匯編,就不能再用舊的源程序格式,應(yīng)研究新的源程序格式。下面以前述匯編源程序的同樣內(nèi)容分32位WINDOWS平臺(tái)和64位WINDOWS平臺(tái)給出匯編源程序格式的研究結(jié)果。

      (一)32位WINDOWS平臺(tái)下匯編源程序格式

      .386

      .model flat ,stdcall

      NULL equ 0

      MB_OK equ 0

      ExitProcess PROTO :DWORD

      MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD

      includelib kernel32.lib

      includelib user32.lib

      .data

      szMES db “HOW DO YOU DO?”,CR,LF,“HOW ARE YOU?”,0

      szCaption db “Win32匯編源程序”,0

      .code

      Start:

      push MB_OK

      lea eax,szCaption

      push eax

      lea eax, szMES

      push eax

      push NULL

      call MessageBoxA

      xor eax,eax

      push eax

      call ExitProcess

      end Start

      采用簡(jiǎn)化段定義,存儲(chǔ)模式為flat,如果CPU工作在傳統(tǒng)32位模式,可以使用DOS或WINDOWS系統(tǒng)調(diào)用,如果CPU工作在IA-32e兼容32位模式,只能使用WINDOWS系統(tǒng)調(diào)用。當(dāng)使用WINDOWS系統(tǒng)調(diào)用時(shí),應(yīng)采用stdcall調(diào)用規(guī)則,并且根據(jù)需要鏈接相應(yīng)API函數(shù)庫(kù)。匯編命令為:ml 匯編源程序文件名.asm /link /entry:Start /SUBSYSTEM:CONSOLE。

      (二)64位WINDOWS平臺(tái)下匯編源程序格式

      (1)使用C語言庫(kù)函數(shù):

      includelib msvcrt.lib

      extern printf: PROC

      .data

      szMES db “HOW DO YOU DO?”,CR,LF,“HOW ARE YOU?”,0Ah

      .code

      Start proc

      sub rsp,28h ;

      lea rcx, szMES;

      mov rax, offset szMES

      call printf

      add rsp, 28h

      ret

      Start endp

      end

      (2)使用WINDOWS系統(tǒng)調(diào)用API函數(shù):

      includelib kernel32.lib

      includelib user32.lib

      extrn ExitProcess: PROC

      extrn MessageBoxA: PROC

      .data

      caption db “Win64匯編源程序”, 0

      szMES db “HOW DO YOU DO?”,CR,LF,“HOW ARE YOU?”, 0

      .code

      Start proc

      sub rsp,28h

      mov rcx, 0

      lea rdx, szMES

      lea r8, caption

      mov r9d, 0

      call MessageBoxA

      mov ecx, eax

      call ExitProcess

      Start endp

      end

      采用簡(jiǎn)化段定義,不支持處理器選擇偽指令,不支持存儲(chǔ)模式偽指令,使用PROTO關(guān)鍵字的偽指令不帶參數(shù)或改用PROC關(guān)鍵字,end偽指令不能指定程序入口點(diǎn)。由于在WINDOWS64下,CPU工作在IA-32e模式,只能使用WINDOWS系統(tǒng)調(diào)用API函數(shù)或C語言庫(kù)函數(shù)。使用WINDOWS系統(tǒng)調(diào)用API函數(shù)時(shí),應(yīng)符合Microsoft 64位調(diào)用規(guī)則。當(dāng)使用WINDOWS系統(tǒng)調(diào)用或C語言庫(kù)函數(shù)時(shí),應(yīng)根據(jù)需要鏈接相應(yīng)API函數(shù)庫(kù)或C語言函數(shù)庫(kù)。匯編命令為:ml64 匯編源程序文件名.asm /link /entry:Start /SUBSYSTEM:CONSOLE。

      三、結(jié)語

      在Intel CPU為Core(TM)i3/i5/i7下,當(dāng)前廣泛安裝的是WINDOWS64平臺(tái),為使用最新版MASM開發(fā)匯編源程序,應(yīng)遵循本文給出的源程序格式,只要不使用特權(quán)指令,可盡情用最新的指令系統(tǒng)做開發(fā),都不會(huì)有問題。希望本文能給講授和學(xué)習(xí)匯編語言程序設(shè)計(jì)的老師和學(xué)生,提供拋磚引玉的幫助。

      [1] Intel Corporation: Intel 64 and IA-32 Architecture Software Developer's Manual Volume 1: Basic Architecture[M/CD]. Http://WWW.INTEL.COM Order Number,2016.253665~059US.

      [2] Intel Corporation: Intel 64 and IA-32 Architecture Software Developer's Manual Volume 2: Instruction Set Reference,A-Z[M/CD]. Http://WWW.INTEL.COM Order Number,2016,253666~059US .

      [3] Intel Corporation: Intel Advanced Vector Extensions Programming Reference [M/CD]. Http://WWW.INTEL.COM Order Number,2011.319433~011.

      [4] Intel Corporation: Intel Architecture Instruction Set Extensions Programming Reference512 [M/CD]. Http://WWW.INTEL.COM Order Number,2016.319433~025.

      [5] 彭茜珍.Intel加密指令研究及其應(yīng)用[J]. 湖北科技學(xué)院學(xué)報(bào),2016,36(12):68~70.

      [6] Microsoft Corporation: Microsoft Macro Assembler reference [M/CD]. https://technet.microsoft.com/zh-cn/library.

      [7] Chris Lomont, Introduction to x64 Assembly. https://www.lomont.org 2009.

      2095-4654(2017)06-0143-03

      2017-06-18

      TP313

      A

      胡 莉

      猜你喜歡
      匯編語言調(diào)用湖北
      The rise of China-Chic
      高等學(xué)校計(jì)算機(jī)專業(yè)課程教學(xué)改革實(shí)踐——以匯編語言與接口技術(shù)課程為例
      馳援湖北
      海峽姐妹(2020年2期)2020-03-03 13:36:28
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      湖北武漢卷
      匯編語言與C語言的混合程序設(shè)計(jì)技術(shù)研究
      電子制作(2019年10期)2019-06-17 11:45:16
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      湖北現(xiàn)“最牛釘子戶” 車道4變2給樓讓路
      澳門月刊(2018年1期)2018-01-17 08:49:15
      提高《匯編語言程序設(shè)計(jì)》教學(xué)效率的思考與實(shí)踐
      基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
      兴隆县| 临泉县| 锡林郭勒盟| 昌都县| 靖州| 富顺县| 全南县| 平果县| 桐庐县| 犍为县| 西华县| 沙坪坝区| 钦州市| 浦江县| 永康市| 丹东市| 洪江市| 咸丰县| 论坛| 衢州市| 丰顺县| 曲靖市| 宁城县| 白城市| 万源市| 江华| 永顺县| 岐山县| 讷河市| 分宜县| 将乐县| 木里| 济源市| 肇州县| 永靖县| 左贡县| 九寨沟县| 织金县| 镇原县| 屯门区| 黄陵县|