『壹』 匯編高手進來幫忙畫下流程圖!!
這是一個找出從BUF開始存儲的8個位元組中的最小數的程序,下面的代碼已給出詳細注釋
;此處輸入數據段代碼
DATAS
SEGMENT
BUF
DB
13,25,23,100,223,78,90,134
;
定義8個位元組
CNT
EQU
$-BUF
;CNT=8
DATAS
ENDS
;此處輸入代碼段代碼
CODES
SEGMENT
ASSUME
CS:CODES,DS:DATAS
START:
MOV
AX,DATAS
;初始化數據段
MOV
DS,AX
MOV
CX,CNT-1
;cx=CNT-1=7,除第一個位元組以外,共循環7次
MOV
SI,OFFSET
BUF
;si保存BUF的首地址
CALL
SEARCH
;調用SEARCH過程,找出最小值
MOV
AH,4CH
;程序結束
INT
21H
SEARCH
PROC
NEAR
MOV
BL,[SI]
;bl先取出第一個位元組
SEAR1:
INC
SI
;si=si+1
CMP
BL,[SI]
;如果bl比下一個位元組[si]的數值要小
JBE
SEAR2
;那麼直接跳到SEAR2處執行
MOV
BL,[SI]
;否則bl=[si],保存當前找到的最小數值
SEAR2:
DEC
CX
;cx=cx-1,cx控製程序的循環次數
JNZ
SEAR1
;cx=0時si已經遍歷了BUF數組的每個位元組,循環結束
MOV
DL,BL
;此時bl里存的便是找到的最小數,dl=bl
MOV
CL,4
;cl=4
SHR
DL,CL
;dl右移4位,此時dl保存的是bl的高4位
CALL
DISP
;調用disp輸出bl的高4位
MOV
DL,BL
;再次賦值
AND
DL,0FH
;把dl的高4位設置為0,此時dl保存的是bl的低四位
CALL
DISP
;調用disp輸出bl的低4位
RET
;返回
SEARCH
ENDP
DISP
PROC
NEAR
CMP
DL,9
;如果dl
<=
9
JBE
DISP1
;那麼直接跳轉到DLSP1執行
ADD
DL,7
;否則dl=dl+7,+30h以後便對應16進制的'A'~'F'字元
DISP1:
ADD
DL,30H
;dl=dl+30h,如果dl<=9那麼dl被轉化為'0'~'1',如果dl>9由於加過7,所以對應'A'~'F'
MOV
AH,2
;2號功能調用輸出dl里的一個字元
INT
21H
RET
;返回
DISP
ENDP
CODES
ENDS
END
START
流程圖:
『貳』 匯編語言程序設計 畫出下列數據段定義的內存儲單元分配圖。要求: (1)指出各變數的偏移地址
DAT1 1000h:0 1,2,18h,34h,35h,36h,45h,0f0h
DAT2 1000h:8 0ch,0,0dh,0,0fbh,0ffh
COUNT=7
1000h:0eh 12h,0,78h,56h
DAT3 1000h:12h 0,3,0,0,8,0,0,0
『叄』 匯編語言作業 怎麼畫數據段
data segment
org 10h
myaddr dw $ 10h
bvar db 1,2,3
db'123'
buf db 5 p(?)
len1=$-bvar len1=11
wvar dw 1,2
dvar dd 1,2,3
len2 equ $-dvar len2=12
len3 equ buf-bvar len3=6
data ends
『肆』 匯編流程圖怎麼畫
我最近每天也在畫流程圖,其實畫流程圖還是挺簡單的,打開迅捷畫圖,裡面有很多的模板,可以直接套用模板編輯,也可以自己新建一個畫布繪制,在畫布的四周有很多的工具欄,這些都是可以使用的,需要添加圖形,在左邊基礎圖形裡面直接拖動圖形至右邊畫布需要的位置即可。
『伍』 匯編,存儲圖怎麼畫
how are you?----在內存中應該是其ASCii碼,這里直接用字元了 !
?----問號表示值不確定,表示對這些內存區不用清零,維持原先存放的值。有些系統也許會自動將其清零。
『陸』 匯編語言存儲結構示意圖
d dw c,'a,b' 語句中,裡面的'a,b' 是' a','b' 還是'ab' ?
下面按照'ab'來描述。
b 為數據常量,不佔內存單元。
『柒』 匯編求助,以下內存定義結構怎麼畫
忽略段地址.
只計算段內位置.
兩個問號的哪裡是我沒看懂2.$.3是什麼意思,不好意思.
『捌』 匯編語言存儲器分段問題
這個比較簡單的,只要自己動手就行。
根據每個段的段基址:DS=10E4H,ES=10F4H、SS=21F0H、CS=31FFH
那麼各段的起始地址為:DS對應的段:10E40H;ES:10F40H;SS:21F00H;CS:31FF0H
各段在由起始地址的64K處終止,因此可以計算各段的終止地址。並將SP指向SS對應的段偏移;IP指向CS對應的段偏移。
對於標志寄存器
NV:未溢出(OF=0)
UP:方向增(DF=0)
DI: 關中斷(IF=0)
PL:符號正(SF=0)
NI:XXX
NA:無輔助進位(AF=0)
PU:(PF)
NC:無進位(CF=0)
但是有些段可以作為代碼段使用,也可以作為數據段使用,段和段之間可以重合。
『玖』 匯編語言程序設計步驟 有那幾步
匯編語言程序設計步驟: 1、 分析問題,抽象出描述問題的數據模型 2、 確定問題的演算法思想 3、 畫出流程圖或結構圖 4、 分配存儲器和工作單元(寄存器) 5、 逐條編寫程序 6、 靜態檢查,上機調試 例:編程查找考生的最高分,假設所有考生分數已存入計算機內存。 1、 分析問題 根據條件、特點、規律 →數學模型 本例分數已給定為0~200之間的整數集合(考慮加試分) ,記為{S},找max{S}(註: 簡單問題不一定寫數學模型) 。 2、 確定演算法思想 最好利用現成演算法和程序設計方法,若無,則需根據實踐經驗總結演算法思想。如本例, 從成績單第一分數往下看,邊看邊比較,記住較高分,舍棄較低分,直至看完,最高分存於 腦中。歸納演算法思想:建立數據指針並指向數據區首地址。將第一數取入寄存器(如AL) , 與下一數比較,若下一數大則將其取入寄存器,否則調整指針,再與下一數比較,重復上述 過程,直至比較完畢,寄存器中即最高分。 讀分數用MOV指令,比較用CMP指令,分析判斷用條件轉移指令。 3、 畫流程圖或結構圖 有邏輯流程、演算法流程、程序流程等,復雜問題需畫模塊結構。本例簡單,只畫出程序 流程圖(用模塊化結構的N-S流程圖表示) : 本例的N-S流程圖 圖中初始化包括:設一個計數器,將分數個數減一後送計數器,每比較一次減一,至 零查找結束;建立一個指針指向數據區。 開始 初始化 取第一數到寄存器 與下一數比較 下一數大? 是 否 取大數到寄存器 修改指針,計數次數減一 返回到循環體開始,直到計數次數為0退出循環 結束 4、 分配存儲器空間和工作單元(寄存器) 定義數據段、堆棧段、代碼段等。工作單元一般用寄存器。本例:分數放數據段,建100 位元組堆棧空間,BX作數據指針,CX作計數器,AL放最高分。 5、 逐條編寫程序 DATA SEGMENT FEN DB 85,90,60,75,87,35,80,78,96,82…… ;存分數 MAX DB ? ;存最高分 DATA ENDS STACK SEGMENT PARA STACK 『STACK』 DB 100 DUP(?) ;100位元組堆棧 STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS MOV AX,0 PUSH AX ;為了返回DOS MOV AX,DATA MOV DS,AX ;置數據段寄存器 MOV BX,OFFSET FEN ;置數據指針 MOV CX,MAX-FEN ;置計數器初值 DEC CX ;N個分數比較N-1次 MOV AL,[BX] ;取第一個分數 LOP: INC BX ;調整指針 CMP AL,[BX] ;與下一數比較 JAE NEXT ;大於等於則轉 MOV AL,[BX] ;否則取下一數 NEXT: LOOP LOP ;計數器減一, ;不為零轉LOP MOV MAX,AL ;存放最高分 RET ;返回DOS START ENDP CODE ENDS END START 6、 靜態檢查,上機調試 選用指令盡量位元組少,使其執行速度快。易錯處應重點查,如比較次數、轉移條件等。 確信無錯後方可上機調試。
『拾』 匯編語言中畫出數據段中數據在主存中的存儲形式。
數據段中數據在主存中的存儲形式為:
07 00 41 42 FF 06 AA FF 00 05
原理,自己寫個空程序,編譯後,用DEBUG
-dds:100 10f
看下,就行了。
DATA SEGMENT ; USE16
A DW B+1
BUF DB 'AB',-1, B-A
CON EQU 500H
LEN EQU $-BUF
B DW 0FFAAH,CON
DATA ENDS
code segment
assume cs:code,ds:DATA
start:
nop
mov ah,4ch
int 21h
code ends
end start