欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

匯編語(yǔ)言功能實(shí)現(xiàn)數(shù)據(jù)復(fù)制實(shí)例詳解

 更新時(shí)間:2021年11月04日 15:32:38   作者:LyncDwight  
這篇文章主要為大家介紹了匯編語(yǔ)言功能實(shí)現(xiàn)數(shù)據(jù)復(fù)制的實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

問(wèn)題1:將內(nèi)存ffff:0~ffff:b單元中的數(shù)據(jù)復(fù)制到0:200~0:20b單元中

分析

1、0:200~0:20b單元如何表示

0020:0~0020:b可以等同于以上單元,而且單元的偏移地址是從0開(kāi)始,和需要復(fù)制的單元相同

2、單元中的數(shù)據(jù)能直接進(jìn)行復(fù)制轉(zhuǎn)移嗎

不可以,需要用寄存器進(jìn)行中轉(zhuǎn)

assume cs:code
code segment
;做法一
;-----------------------------
	mov bx,0		;因?yàn)閿?shù)據(jù)來(lái)源和去處的偏移地址相同,用bx同意代替
	mov cx,12
 
 
s:	mov ax,offffh	;因?yàn)樾枰貜?fù)利用ax,所以需要循環(huán)設(shè)置
	mov ds,ax
	mov dl,ds:[bx]	;將數(shù)據(jù)復(fù)制到dx的低8位中
 
	mov ax,0020h
	mov ds,ax
	mov ds:[bx],dl	;將數(shù)據(jù)復(fù)制到指定的內(nèi)存單元中
 
	inc bx			;向下一個(gè)單元移動(dòng)
	loop s
 
;-----------------------------
 
;做法二,上一個(gè)做法需要重復(fù)設(shè)置ds,這里可改進(jìn)
;-----------------------------
	mov ax,0ffffh
	mov ds,ax 
	mov ax 0020h
	mov es,ax 
	mov bx,0
	mov cx,12
 s:	mov dl,ds:[bx]
	mov es:[bx],dl
	inc bx
	loop s
 
;-----------------------------
 
	mov ax,4c00h
	int 21h
 code ends
end

問(wèn)題2:將“mov ax,4c00h“之前的指令復(fù)制到內(nèi)存0:200處

分析:

1、如何知道代碼的起始地址

利用cs指向的就是代碼的開(kāi)始地址

2、如何知道代碼的長(zhǎng)度

可以使用(offset 標(biāo)號(hào))之間相減得出代碼的長(zhǎng)度

assume cs:code
code segment
start:	        mov ax,cs
	 	mov ds,ax
		mov ax,0020h
		mov es,ax	;設(shè)置復(fù)制數(shù)據(jù)的來(lái)源和去處
 
		mov bx,0
		mov cx,offset last-offset start	  ;設(shè)置代碼的長(zhǎng)度
 
s:		mov al,ds:[bx]
		mov es:[bx],al	;實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)移
		inc bx
last:           loop s
 
		mov ax,4c00h
		int 21h
code ends
end

問(wèn)題3:將程序中定義的數(shù)據(jù)逆序存放

分析: 如何實(shí)現(xiàn)逆序 利用棧的特性實(shí)現(xiàn)

assume cs:code
code segment
	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
	dw 16 dup(0)	;??臻g的使用
 
start: 	mov ax,cs
		mov ss,ax
		mov sp,30h	;??臻g是從后往前添加,棧頂指向30h
 
		mov bx,0
		mov cx,8
 
s:		push cs:[bx]
		add bx,2
		loop s		;將數(shù)據(jù)段中的0~15單元中的數(shù)據(jù)壓入棧中
 
		mov bx,0
		mov cx,8
 
s0:		pop cs:[bx]
		add bx,2
		loop s0		;依次出棧8個(gè)字型數(shù)據(jù)
 
		mov ax,4c00h
		int 21h
 
code ends
end start

改進(jìn)版:以上程序中的內(nèi)容沒(méi)有分段存儲(chǔ),可改進(jìn)

assume cs:code,ds:data,ss:stack
date segment
	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
date ends
stack segment
	dw 16 dup(0)	;??臻g的使用
stack ends 
code segment
start:	mov ax,stack
		mov ss,ax
		mov sp,20h	;棧開(kāi)始的地址已經(jīng)不包括data段的內(nèi)容,則為20h 
		mov ax,data
		mov ds,ax
 		mov bx,0
		mov cx,8 
s:		push ds:[bx]
		add bx,2
		loop s
 		mov bx,0
		mov cx,8 
s0:		pop ds:[bx]
		add bx,2
		loop s0
 		mov ax,4c00h
		int 21h
code ends 
end start

問(wèn)題4:將字符串”welcome to masm”復(fù)制到它后面的數(shù)據(jù)區(qū)中

分析

1、要復(fù)制到數(shù)據(jù)在哪里

數(shù)據(jù)的起始地址在data:0

2、要復(fù)制到哪里去

復(fù)制的數(shù)據(jù)長(zhǎng)度是16個(gè)字節(jié),后面的數(shù)據(jù)區(qū)的偏移地址就是16

3、一共復(fù)制了幾次

因?yàn)槭褂玫氖?6位寄存器,一次可以傳輸兩個(gè)字節(jié),所以只需要執(zhí)行8次

assume cs:code,ds:data
 data segment
	db 'welcome to masm!'
	db 16 dup(0)
data ends 
;----------------------------------
;做法一
code segment
start:	mov ax,data
		mov ds,ax
		mov si,0	;設(shè)置數(shù)據(jù)來(lái)源的起始位置
		mov di,16	;設(shè)置數(shù)據(jù)去處的起始位置
 
		mov cx,8	;用寄存器進(jìn)行復(fù)制,只需要8次
s:		mov ax,ds:[si]
		mov ds:[di],ax
		add si,2
		add di,2
		loop s 
		mov ax,4c00h
		int 21h
code ends
;----------------------------------
;做法二:只利用一個(gè)寄存器就可以實(shí)現(xiàn) 
code segment
start:	mov ax,data
		mov ds,ax
		mov si,0
 
		mov cx,8
s: 		mov ax,ds:[si]
		mov ds:[si+16],ax
		add si,2
		loop s
 		mov ax,4c00h
		int 21h
code ends
 end start

以上就是匯編語(yǔ)言功能實(shí)現(xiàn)數(shù)據(jù)復(fù)制實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于匯編語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)復(fù)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • DEBUG 命令詳解

    DEBUG 命令詳解

    這篇文章主要介紹了DEBUG 命令詳解,需要的朋友可以參考下
    2006-12-12
  • X86匯編調(diào)試環(huán)境搭建的過(guò)程

    X86匯編調(diào)試環(huán)境搭建的過(guò)程

    本次使用vscode搭建的,需要的插件有X86 and X86_64 Assembly(也可以使用masm插件),還有一個(gè)hexdump for VSCode。 安裝NASM,并添加到環(huán)境變量,下面看下X86匯編調(diào)試環(huán)境搭建的過(guò)程吧
    2021-11-11
  • 匯編基礎(chǔ)程序編寫(xiě)教程示例

    匯編基礎(chǔ)程序編寫(xiě)教程示例

    這篇文章主要為大家介紹了匯編基礎(chǔ),程序編寫(xiě)教程示例,文中附含詳細(xì)的圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 匯編語(yǔ)言入門(mén)教程(這一篇足矣)

    匯編語(yǔ)言入門(mén)教程(這一篇足矣)

    匯編語(yǔ)言是一種最低級(jí)、最古老、不具有移植性的編程語(yǔ)言,它能夠直接訪問(wèn)計(jì)算機(jī)硬件,所以執(zhí)行效率極高,占用資源極少,想學(xué)習(xí)匯編語(yǔ)言的朋友不妨閱讀下本教程
    2020-01-01
  • 匯編語(yǔ)言指令大全 X86和X87匯編指令大全(帶注釋)

    匯編語(yǔ)言指令大全 X86和X87匯編指令大全(帶注釋)

    匯編指令集太多,如果不用就會(huì)忘記,所以將i處理器官方的指令集大全寫(xiě)到博客上,有需要的人可以參考一下
    2021-10-10
  • 詳解匯編語(yǔ)言RCL(帶進(jìn)位循環(huán)左移)和RCR(帶進(jìn)位循環(huán)右移)指令

    詳解匯編語(yǔ)言RCL(帶進(jìn)位循環(huán)左移)和RCR(帶進(jìn)位循環(huán)右移)指令

    這篇文章主要介紹了匯編語(yǔ)言RCL(帶進(jìn)位循環(huán)左移)和RCR(帶進(jìn)位循環(huán)右移)指令的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 淺析ARMv8匯編指令adrp和adr

    淺析ARMv8匯編指令adrp和adr

    這篇文章給大家介紹ARMv8匯編指令adrp和adr的相關(guān)知識(shí),暫時(shí)不介紹alpha生成的指令,因此先來(lái)主要分析一下,arm架構(gòu)之所以少生成匯編指令的原因——adrp指令,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • 匯編語(yǔ)言中cmp指令用法筆記與總結(jié)

    匯編語(yǔ)言中cmp指令用法筆記與總結(jié)

    這篇文章主要介紹了匯編語(yǔ)言中cmp指令用法,結(jié)合實(shí)例形式總結(jié)分析了匯編語(yǔ)言cmp指令基本功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • 匯編語(yǔ)言DOSBox及debug.exe在Windows64下環(huán)境搭建

    匯編語(yǔ)言DOSBox及debug.exe在Windows64下環(huán)境搭建

    這篇文章主要為大家介紹了匯編語(yǔ)言環(huán)境的搭建DOSBox及debug.exe在Windows64下安裝配置過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • UEFI開(kāi)發(fā)基礎(chǔ)匯編代碼的使用

    UEFI開(kāi)發(fā)基礎(chǔ)匯編代碼的使用

    這篇文章主要為大家介紹了UEFI開(kāi)發(fā)基礎(chǔ)匯編代碼使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論