32位組合語言學習筆記(32)--loop指令
loop指令用ecx來控制迴圈次數,loop label,相當於如下兩條指令:
dec ecx
jne label
如下是使用loop指令的一個示例程式:
section .data EditBuff: db 'abcdefghijklm',10 BUFFERLEN equ $-EditBuff FILLCHR equ 35 ;'#' section .text WriteStr: push eax ; Save pertinent registers push ebx mov eax,4 ; Specify sys_write call mov ebx,1 ; Specify File Descriptor 1: Stdout int 80H ; Make the kernel call pop ebx ; Restore pertinent registers pop eax ret ; Go home global _start _start: nop mov ecx,EditBuff mov edx,BUFFERLEN call WriteStr mov edi,EditBuff mov ecx,BUFFERLEN-1 mov al,FILLCHR DoChar: stosb ; Note that there's no REP prefix! loop DoChar ; Go back & do another char until ECX goes to 0 mov ecx,EditBuff mov edx,BUFFERLEN call WriteStr Exit: mov eax,1 ; Code for Exit Syscall mov ebx,0 ; Return a code of zero int 80H ; Make kernel call
程式分析:
mov edi,EditBuff //edi = EditBuff
mov ecx,BUFFERLEN-1 //ecx= BUFFERLEN-1,這樣可以不覆蓋最後一個換行符
mov al,FILLCHR //al = ‘#’
DoChar: stosb //用al中的值填充edi
loop DoChar //ecx=ecx-1,如果ecx不等於0,跳轉到DoChar。
makefile檔案內容:
loopdemo: loopdemo.o ld -o loopdemo loopdemo.o loopdemo.o: loopdemo.asm nasm -f elf -g -F stabs loopdemo.asm -l loopdemo.lst
測試:
[[email protected] loopdemo]# make
nasm -f elf -g -F stabs loopdemo.asm -l loopdemo.lst
ld -o loopdemo loopdemo.o
[[email protected] loopdemo]# ./loopdemo
abcdefghijklm
#############
相關推薦
32位組合語言學習筆記(32)--loop指令
loop指令用ecx來控制迴圈次數,loop label,相當於如下兩條指令: dec ecx jne label 如下是使用loop指令的一個示例程式: section .data EditBuff: db 'abcdefghijklm',10 BUFFERL
32位組合語言學習筆記(12)--分析switch語句的彙編程式碼
switch語句可以根據整數索引值進行多重分支選擇,程式碼的可讀性好,switch語句的彙編實現是通過跳轉表來完成的,這樣執行效率也很高。int switch_eg(int x){int result = x;switch (x) {case 100:result*= 1
32位組合語言學習筆記(21)--用NASM實現Hello World小程式
前面20篇彙編學習筆記主要是學習《深入理解計算機系統》過程中所記錄的筆記,接下來打算學一下另外一本書《Assembly Language step by step programming with linux》。首先需要安裝NASM彙編器,例如:rpm –ivh nasm-2
32位組合語言學習筆記(41)--fgets等函式的使用
在《32位組合語言學習筆記(13)--函式的呼叫》曾分析過c函式的呼叫過程,對於c函式的預設呼叫約定cdecl,要求函式引數的壓棧順序是從右向左,由呼叫方來清理棧。下面示例程式會使用libc庫的幾個函式: char *fgets( char *string, int
Java學習筆記32(集合框架六:Map接口)
hashtable code rri 輸出 clas bsp pan ons spa Map接口與Collection不同: Collection中的集合元素是孤立的,可理解為單身,是一個一個存進去的,稱為單列集合 Map中的集合元素是成對存在的,可理解為夫妻,是一對一對存
C語言實例解析精粹學習筆記——32
組合 pri 結構體指針 name ber ESS tdi 筆記 string 實例32: 編制一個包含姓名、地址、郵編和電話的通訊錄輸入和輸出函數。 思路解析: 1、用結構體來完成姓名、地址、郵編和電話的組合。 2、結構體指針的使用。 3、malloc的使
python學習筆記(32) 多型和封裝
python天生支援多型 #動態強型別語言 list tuple 不崇尚根據繼承所得來的相似 如果兩個類剛好相似,不產生父類的子類的兄弟關係,而是鴨子型別 list tuple這種相似,是自己寫程式碼的時候約束的,而不是通過父類約束的 優點:鬆耦合 每個相似的類之間沒有影響 缺點:太隨意,只能靠
派生類的建構函式和解構函式(C++學習筆記 32)
引入繼承的目的:①派生類繼承了基類的成員,實現了原有程式碼的重用。②實現程式碼的擴充,只有在派生類中通過新增新的成員,加入新的功能,類的派生才有實際意義。 基類的建構函式和解構函式不能被繼承,在派生類中,如果對派生類新增的成員進行初始化,就需要加入派生類的建構函式,同時,對所有從基類
【機器學習筆記32】短時傅立葉變換
傅立葉變換的侷限性 1 需要利用訊號的全部時域資訊; 2 沒有反應頻率隨時間變換的訊號情況; 短時傅立葉變換 1964年Gabor提出了短時傅立葉變換(有叫Gabor變換),即在傳統的傅立葉變換的基礎上加了一個時間窗。如下: Sw(x,t)=∫x(τ)m(τ−
吳恩達深度學習筆記(32)-Dropout正則化Dropout Regularization
dropout 正則化(Dropout Regularization) 除了L2正則化,還有一個非常實用的正則化方法——“Dropout(隨機失活)”,我們來看看它的工作原理。 假設你在訓練上圖這樣的神經網路,它存在過擬合,這就是dropout所要處理的,我們複製這個神經網路,dr
Java學習筆記32:finally語句
package Demo_exception; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class FinallyTe
從零開始-Machine Learning學習筆記(32)-強化學習
文章目錄 1. K-搖臂賭博機 1.1 探索與利用 1.2 $\epsilon$ -貪心 1.3 Softmax 2. 有模型學習 2.1 策略評估
Linux學習筆記32——linux上搭建持續整合環境之maven及nexus倉庫
linux搭建jenkins 一、什麼是持續整合 這個做法有如下好處: 整體流程: 重要組成部分 二、安裝jdk及maven 1,安裝jdk 2,安裝maven 三、安裝Maven私服N
組合語言學習筆記(十二)-浮點指令
浮點數如何儲存 浮點數的運算完全不同於整數,從暫存器到指令,都有一套獨特的處理流程,浮點單元也稱作x87 FPU。 現在看浮點數的表示方式,我們所知道的,計算機使用二進位制儲存資料,所表示的數字都具有確定性,那是如何表示浮點這種具有近似效果的資料呢,答案是通過科學計數
Eratosthenes篩法求1——100000之間所有的素數(32位組合語言)
include io32.inc .dataarray byte 100001 dup(30h) .codestart:mov esi,2 ;用來記錄某數,方便以後找所有可以被其整除的數xor edi
linux學習筆記:基本指令mkdir, rmdir 、和rm
pytho mil 註意 folder 執行 dir 不同 情況 我們 #學習內容來自莫煩python mkdir 建立文件夾 mkdir (make directory) 就是創建一個文件夾的意思, 使用起來很簡單. $ mkdir folder2 如果你想在這個目錄給
Linux學習筆記之基本指令
20px rar解壓 ont 信息 bsp font -h 目錄 展示 body { background: #f4f4f4 } .title { width: 100%; background: #5cb85c; padding: 5px; font-size: 20px
學習筆記:include指令和include動作的區別 -- include動作和forward動作比較
<%@ include file =".." ...%>和<jsp:include> 1、靜態引入jsp檔案:jsp指令元素 <%@ include file="檔案路徑" %> (等於是將兩個jsp合併為一個jsp,就是將A.jsp的程式碼複製到B.
「學習筆記」include指令與jsp:include動作標識的區別
1 include指令通過file屬性指定被包含的檔案,並且file屬性不支援任何表示式; <jsp:include>動作標識通過page屬性指定被包含的檔案,而且page屬性支援JSP表示式。 2 使用include指令時,被包含的檔案內容會原封不動的
Linux在64位執行32位程式(安裝32位庫:rpm、deb)
記錄: ------------------------------------------------------------------- centos7.x 安裝了glibc:glibc-2.17-157.el7.i686 glibc-2.17 nodeps安裝,即可