文档库 最新最全的文档下载
当前位置:文档库 › PIC程序模块

PIC程序模块

PIC程序模块
PIC程序模块

;时间加1,减1 测试程序INCLUDE #INCLUDE"MAIN.INC"

#INCLUDE"LEDSN.INC" #INCLUDE"DEL.INC"

;#INCLUDE"KEYS.INC" #INCLUDE"TIME.INC" DA T1 EQU 20H DA T2 EQU 21H DA T3 EQU 22H DA T4 EQU 23H DA T5 EQU 24H DA T6 EQU 25H DA T7 EQU 26H DA T8 EQU 27H ORG 00H

NOP

MAIN:

CALL MAINIT MLP:

CALL DEL

BTFSS 2FH,0

GOTO MLP

CALL TIMEF

CALL DISP

BCF 2FH,0

GOTO MLP

DELA

LEDNS

TMEF

MAINIT:

BANK1

MOVLW 0FH

MOVWF TD

CLRF TC

CLRF TB

BANK0

MOVLW 04H

MOVWF DA T1

MOVLW 6H

MOVWF DA T2

CLRF DA T3

CLRF DA T4

BSF 2FH,4

MOVLW .100

MOVWF TMA

MOVLW .10

MOVWF TMB

MOVLW 0FFH

MOVWF PB

MOVLW 0FFH

MOVWF PC

RETLW 0

END

;************************

;时间加1 减1 子程序

;1MS延时加1

;TMEEN=1 加1 从00-00-00到

23-59-59

;TMEEN=2减 1 从23-59-59到

00-00-00

#DEFINE TMEEN 1

;2FH.4 =1 时间加1,减1 能用

SEC EQU 2AH

MIN E QU 2BH

HOU EQU 2CH

TMA EQU 2DH

TMB EQU 2EH

;SECL EQU 30H

;SECH EQU 31H

;DBIT1 EQU 32H

;MINL EQU 33H

;MINH EQU 34H

;DBIT2 EQU 35H

;HOUL EQU 36H

;HOUH EQU 37H

IF TMEEN==1

TMEF MACRO

TIMEF:

BTFSS 2FH,4

GOTO TMEXT

DECFSZ TMA,1

GOTO TMEXT

MOVLW .100

MOVWF TMA

DECFSZ TMB,1

GOTO TMEXT1

MOVLW .10

MOVWF TMB

INCF SEC,1

MOVF SEC,0

ANDLW 0FH

XORLW 0AH

BNZ TMEXT

MOVLW 6

ADDWF SEC,1

SWAPF SEC,0

ANDLW 0FH

XORLW 6

BNZ TMEXT

CLRF SEC

INCF MIN,1

MOVF MIN,0

ANDLW 0FH

XORLW 0AH

BNZ TMEXT

MOVLW 6

ADDWF MIN,1

SWAPF MIN,0

ANDLW 0FH

XORLW 6

BNZ TMEXT

CLRF MIN

INCF HOU,1

BTFSC HOU,5

GOTO ADD3

MOVF HOU,0

ANDLW 0FH

XORLW 0AH

BNZ TMEXT

MOVLW 6

ADDWF HOU,1

TMEXT1:CALL TCONV

TMEXT:

RETLW 0

ADD3:

BTFSS HOU,2

RETLW 0

CLRF HOU

RETLW 0

TMCON

ENDM

ENDIF

IF TMEEN==2

TMEF MACRO

TIMEF:

BTFSS 2FH,4

GOTO TEXT

DECFSZ TMA,1

GOTO TEXT

MOVLW .100

MOVWF TMA

DECFSZ TMB,1

GOTO TEXT1

MOVLW .10

MOVWF TMB

MOVF SEC,0

BNZ DECS

MOVLW 59H

MOVWF SEC

MOVF MIN,0

BNZ DECM

MOVLW 59H

MOVWF MIN

MOVF HOU,0

BNZ DECH

MOVLW 23H

MOVWF HOU TEXT1:CALL T CONV TEXT:

RETLW 0 DECS:DECF SEC,1

MOVF SEC,0

ANDLW 0FH

XORLW 0FH

BNZ TEXT

MOVLW 6

SUBWF SEC,1

RETLW 0 DECM:DECF MIN,1

MOVF MIN,0

ANDLW 0FH

XORLW 0FH

BNZ TEXT

MOVLW 6

SUBWF MIN,1

RETLW 0 DECH:DECF HOU,1

MOVF HOU,0

ANDLW 0FH

XORLW 0FH

BNZ TEXT

MOVLW 6

SUBWF HOU,1

RETLW 0

TMCON

ENDM

ENDIF

TMCON MACRO

TCONV:

MOVF SEC,0

ANDLW 0FH

MOVWF DA T1

SWAPF SEC,0

ANDLW 0FH

MOVWF DA T2

MOVF MIN,0

ANDLW 0FH

MOVWF DA T4

SWAPF MIN,0

ANDLW 0FH

MOVWF DA T5

MOVF HOU,0

ANDLW 0FH

MOVWF DA T7

SWAPF HOU,0

ANDLW 0FH

MOVWF DA T8

MOVLW 10H

MOVWF DA T3

MOVWF DA T6

RETLW 0

ENDM

;*********** ***********

;功能:数码管显示N位数

;初始化:POUT=PDIG=0XFF

;输入:LEDS=1 DAT1为要显示的

;LEDS=2 DA T1,DAT2为要显示的数

; LEDS=3 DA T1,DAT2,DAT3为

要显示的数

; LEDS=4或5 4<=N<=8

DA T1[N]为要显示的数

;应用:改变LEDS 的赋值可选择编

译调用不同的程序

;DEFINE LEDS 1

;在主程序文件中加入LEDNS宏

;在主程序中直接调用DISP

;******* ***********

POUT EQU PB

PDIG EQU PC

;DAT1 EQU V AL

;NBYT 为4,5子程序用

;NBYT为要显示的位数

#DEFINE NBYT 8

;LEDS 为要调用的显示程序

#DEFINE LEDS 4

;#DEFINE LEDAC 2

IF LEDS==3||4

DID EQU 29H

ENDIF

IF LEDS==5

DID EQU 29H

DIG EQU 28H

ENDIF

;**************************

IF LEDS==1

LEDNS MACRO

;1BYTE LED DISPLAY

;功能:数码管显示1位数

;初始化:POUT=PDIG=0XFF

;输入:DAT1为要显示的数

;应用:在程序中声明

;DEFINE LEDS 1

;在主程序文件中加入LEDNS宏

;在主程序中直接调用DISP

DISP:

MOVF DA T1,0

CALL TAB

MOVWF POUT

; MOVLW 02H

; MOVWF PDIG

COMF POUT,1

;共阴极,共阳可略

BCF PDIG,0

RETLW 0

LEDTAB

ENDM

ENDIF

;**********************

IF LEDS==2

LEDNS MACRO

;2BYTE LED DISPLAY

;功能:数码管显示2位数

;初始化:POUT=PDIG=0XFF

;输入:DAT1,DAT2为要显示的数

;应用:在程序中声明

;DEFINE LEDS 2

;在主程序文件中加入LEDNS宏;在主程序中直接调用DISP DISP:

MOVLW 0FFH

MOVWF POUT

BTFSC PDIG,1

GOTO DPS1

MOVF DA T1,0

CALL TAB

MOVWF POUT

COMF POUT,1

BCF PDIG,0

BSF PDIG,1

RETLW 0

DPS1:MOVF DA T2,0

CALL TAB

MOVWF POUT

COMF POUT,1

BSF PDIG,0

BCF PDIG,1

RETLW 0

LEDTAB

ENDM

ENDIF

;****************** *****

IF LEDS==3

LEDNS MACRO

;功能:数码管显示3位数

;初始化:POUT=PDIG=0XFF

; DID=0

;输入:DAT1,DAT2为要显示的数;应用:在程序中声明

;DEFINE LEDS 3

;在主程序文件中加入LEDNS宏;在主程序中直接调用DISP DISP: ; 3-4BYTE

MOVLW 0H

MOVWF POUT

MOVF DID,0

ADDWF PCL,1

DSP:GOTO DSP1

GOTO DSP2

GOTO DSP3

CLRF DID

RETLW 0

DSP1:

MOVF DA T1,0

CALL TAB

MOVWF POUT

COMF POUT,1

MOVLW 0FEH

MOVWF PDIG

INCF DID,1

RETLW 0

DSP2:MOVF DA T2,0

CALL TAB

MOVWF POUT

COMF POUT,1

SETC

RLF PDIG,1

INCF DID,1

RETLW 0

DSP3:MOVF DA T3,0

CALL TAB

MOVWF POUT

COMF POUT,1

SETC

RLF PDIG,1

INCF DID,1

RETLW 0

LEDTAB

ENDM

ENDIF

;************************

IF LEDS==4

LEDNS MACRO

;功能:数码管显示N位数

;初始化:POUT=PDIG=0XFF

; DID=0

;输入:DAT1[N]为要显示的数

;应用:在程序中声明

;DEFINE NBYT N

4<=NBYT<=8

;DEFINE LEDS 4

;在主程序文件中加入LEDNS宏

;在主程序中直接调用DISP

DISP:MOVF DID,0

XORLW NBYT

BTFSS STA TUS,Z

GOTO DNEX

CLRF DID

MOVLW 0FEH

MOVWF PDIG

DNEX:

MOVF DID,0

BZ DNEX1

SETC

RLF PDIG,1

DNEX1:MOVLW DA T1

MOVWF FSR

MOVF DID,0

ADDWF FSR,1

MOVF INDF,0

CALL TAB

MOVWF POUT

COMF POUT,1

INCF DID,1

RETLW 0

LEDTAB

ENDM

ENDIF

;********* ***********

IF LEDS==5

LEDNS MACRO

;功能:数码管显示N位数,同上

;初始化:POUT=PDIG=0XFF

; DID=0 ,DIG=0XFE

;输入:DAT1[N]为要显示的数

;应用:在程序中声明

;DEFINE NBYT N

N位要显示的数

;DEFINE LEDS N 5

;在主程序文件中加入LEDNS宏

;在主程序中直接调用DISP

DISP:

MOVLW 0H

MOVWF POUT

MOVLW DA T1

MOVWF FSR

MOVF DID,0

ADDWF FSR,1

DSLP:MOVF INDF,0

CALL TAB

MOVWF POUT

COMF POUT,1

MOVF DIG,0

MOVWF PDIG

SETC

RLF DIG,1

DSEXT:

INCF DID,1

MOVF DID,0

XORLW NBYT

BTFSS STA TUS,Z

RETLW 0

CLRF DID

MOVLW 0FEH

MOVWF DIG

RETLW 0

LEDTAB

ENDM

ENDIF

LEDTAB MACRO

TAB:;ANDLW 0FH

ADDWF PCL

TAB1:RETLW 0XC0 ;0

RETLW 0XF9 ;

RETLW 0XA4

RETLW 0XB0

RETLW 0X99

RETLW 0X92

RETLW 0X82

RETLW 0XF8

RETLW 0X80

RETLW 0X90

RETLW 0X88

RETLW 0X83

RETLW 0XC6

RETLW 0XA1

RETLW 0X86

RETLW 0X8E ;F

RETLW 0XBF ;- 10H

RETLW 0X89 ;H 11H

RETLW 0X8F ;K

RETLW 0XC7 ;L

RETLW 0XAB ;N 14H

RETLW 0X8C ;P

RETLW 0X0

ENDM

;*************************** ;按键驱动程序

;按键处理子程序;KEYSC 为按键扫描方式

;KEYSC=1 4X1按键返回0-F

;KEYSC=2 4X1按键返回1,2,3,4

;KEYSC=3 4X4按键返回0-F

;KEYSC=4 4X4按键返回0-F,扫

描方式不同

;KEYSC=5 3X4按键返回0-B

;KEYSC=6 8X8

;KEYSC=7

;外部使用时用到的变量

#DEFINE KEYSC 4

;按键返回值

V AL EQU 70H

;*******************

;内部使用的变量

KID EQU 2EH

KPIN EQU PD

KPINR EQU PC

KTMP EQU 30H

;******************

KEYFS MACRO

KEYEN:MOVLW 0FH

MOVWF KPIN

CALL DEL

NOP

MOVF KPIN,0

XORLW 0FH

BZ KEEXT

MOVLW 30

MOVWF KTMP

INCF KID,1

KEEXT:

RETLW 0

KEYDEL:

DECFSZ KTMP,1

RETLW 0

INCF KID,1

RETLW 0

KEYUP:

MOVLW 0FH

MOVWF KPIN

NOP

MOVF KPIN,0

XORLW 0FH

BNZ KUEXT

INCF KID

KUEXT:

RETLW 0

ENDM

;**********************

;4X1按键程序

;硬件输入:KPIN 为按键扫描端口

;按键返回:V AL=(0-15)

;可组合按键

IF KEYSC==1

KEYSA MACRO

KEYSCAN:

MOVLW 0FH

MOVWF KPIN

NOP

NOP

MOVF KPIN,W

XORLW 0FH

BZ KSEXT

MOVWF V AL

INCF KID

RETLW 0

KSEXT:CLRF K ID

RETLW 0

ENDM

ENDIF

;********************

;4X1 按键

IF KEYSC==2

KEYSA MACRO

KEYSCAN:

MOVF KPIN,0

XORLW 0FH

BZ KSEXT

MOVWF KTMP

MOVLW 4

MOVWF V AL

CLRC

KSL:RRF KTMP,1

BC KV AL

DECFSZ V AL,1

GOTO KSL

KSEXT:CLRF KID

RETLW 0

KVAL:

INCF KID,1

RETLW 0

ENDM

ENDIF

;********************** ;4X4 按键

IF KEYSC==3

KEYSA MACRO KEYSCAN:

MOVLW 0FH

MOVWF KPIN

; CALL DEL

NOP

NOP

MOVF KPIN,0

XORLW 0FH

BZ KSEXT

CLRF V AL

MOVLW 0EFH MOVWF R0

KS1:MOVF R0,0 MOVWF KPIN

CALL DEL

NOP

; CALL DEL

MOVF KPIN,0

ANDLW 0FH

XORLW 0FH

BZ KS3

MOVWF KTMP MOVLW 4

MOVWF R1

KS2:RRF KTMP,1

BC KV AL

DECFSZ R1,1

GOTO KS2

KS3:

BTFSS R0,7

GOTO KSEXT

INCF V AL,1

SETC

RLF R0,1

GOTO KS1

KV AL:

CLRC

DECF R1

RLF R1,1

RLF R1,0

ADDWF V AL,1

INCF KID,1

RETLW 0

KSEXT:CLRF KID

CLRF V AL

RETLW 0

ENDM

ENDIF

;********************

;4X4 按键

IF KEYSC==4

KEYSA MACRO

KEYSCAN:

MOVLW 0FH

MOVWF KPIN

NOP

NOP

MOVF KPIN,0

XORLW 0FH

BZ KSEXT

CLRF V AL

MOVLW 0EFH

MOVWF R0

KS1:MOVF R0,0

MOVWF KPIN

CALL DEL

NOP

MOVF KPIN,0

ANDLW 0FH

MOVWF KTMP

MOVLW 4

MOVWF R1

KS2:RRF KTMP,1

BNC KV AL

INCF V AL,1

DECFSZ R1,1

GOTO KS2

KS3:

BTFSS R0,7

GOTO KSEXT

SETC

RLF R0,1

GOTO KS1

KV AL:

INCF KID,1

RETLW 0

KSEXT:CLRF K ID

CLRF V AL

RETLW 0

ENDM

ENDIF

;**********************

;4X3 按键程序

;V AL=0-B

IF KEYSC==5

KEYSA MACRO

KEYSCAN:

MOVLW 0FH

MOVWF KPIN

NOP

NOP

MOVF KPIN,0

XORLW 0FH

BZ KSEXT

CLRF VAL

MOVLW 0EFH

MOVWF R0

KS1:MOVF R0,0

MOVWF KPIN

CALL DEL

NOP

MOVF KPIN,0

ANDLW 0FH

XORLW 0FH

BZ KS3

MOVWF KTMP

MOVLW 3

MOVWF R1

KS2:RRF KTMP,1

BC KV AL

DECFSZ R1,1

GOTO KS2

KS3:

BTFSS R0,7

GOTO KSEXT

INCF V AL,1

SETC

RLF R0,1

GOTO KS1

KVAL:

CLRC

DECF R1

RLF R1,1

RLF R1,0

ADDWF V AL,1 INCF KID,1 RETLW 0

KSEXT:CLRF KID CLRF V AL

RETLW 0

ENDM

ENDIF

;***************** ;----------------

;8X8 按键程序

;KPIN 按键扫描输入;KPINR 按键扫描输出;V AL=0-64

;NO RUN

IF KEYSC==6 KEYSA MACRO KEYSCAN:

MOVLW 0FFH MOVWF KPIN CLRF KPINR

NOP

CALL DEL

NOP

MOVF KPIN,0 XORLW 0FFH

BZ KSEXT

CLRF V AL MOVLW 0FEH MOVWF R0

KS1:MOVF R0,0 MOVWF KPINR CALL DEL

NOP

MOVF KPIN,0 ANDLW 0FFH XORLW 0FFH

BZ KS3

MOVWF KTMP MOVLW 8

MOVWF R1

KS2:RRF KTMP,1 BC KV AL DECFSZ R1,1

GOTO KS2

KS3:

BTFSS R0,7

GOTO KSEXT

INCF V AL,1

SETC

RLF R0,1

GOTO KS1

KV AL:

MOVLW 1H

MOVWF R2

MOVF R1,1

BZ KSEXT

DECF R1,1

BZ KVNEX

KVS1: CLRC

RLF R2,1

RLF R2,1

RLF R2,1

DECFSZ R1,1

GOTO KVS1

MOVF R2,0

ADDWF V AL,1

KVNEX:

INCF KID,1

RETLW 0

KSEXT:CLRF KID

CLRF V AL

RETLW 0

ENDM

ENDIF

;*****************

TITLE "MAIN MACRO FILE"

;经常用到的自定义宏命令和变量

;简略指令集;程序内部暂存器,只中

当前子程序中使用;程序退出后其值

效常作循环暂存变量

R0 EQU 40H

R1 EQU 41H

R2 EQU 42H

R3 EQU 43H

R4 EQU 44H

R5 EQU 45H

R6 EQU 46H

R7 EQU 47H

AW EQU 48H

BW EQU 49H

CW EQU 4AH

;SETRP0=RP0=1 SETRP1=RP1=1

#DEFINE SETRP0 BSF STATUS,5

#DEFINE SETRP1 BSF STATUS,6

;CLRP0=RP0=0 CLRP1=RP1=0

#DEFINE CLRP0 BCF STATUS,5

#DEFINE CLRP1 BCF STATUS,6

;CLRGIE=GIE=0 SETGIE=GIE=1

#DEFINE CLRGIE B CF INTCON,7

#DEFINE SETGIE BSF INTCON,7

#DEFINE CLRPBF BCF INTCON,0

#DEFINE SETPBF BSF INTCON,0

#DEFINE CLRINTF BCF INTCON,1

#DEFINE SETINTF BSF INTCON,1

#DEFINE CLRPEIE BCF INTCON,6

#DEFINE SETPEIE BSF INTCON,6

;CLRT0F=T0IF=0 SET0F=T0IF=1

#DEFINE CLRT0F BCF INTCON,2

#DEFINE SET0F BSF INTCON,2

#DEFINE CLRT1F BCF PIR1,0

#DEFINE SET1F BSF PIR1,0

#DEFINE CLRT2F BCF PIR1,1

#DEFINE SET2F BSF PIR1,1

#DEFINE CLRCP1F BCF PIR1,2

#DEFINE SETCP1F BSF PIR1,2

#DEFINE CLRSPF B CF PIR1,3

#DEFINE SETSPF BSF PIR1,3

#DEFINE CLRTXF BCF PIR1,4

#DEFINE SETTXF B SF PIR1,4

#DEFINE CLRRXF BCF PIR1,5

#DEFINE SETRXT BSF PIR1,5

#DEFINE CLRADF B CF PIR1,6

#DEFINE SETADF BSF PIR1,6

#DEFINE CLRPSPF BCF PIR1,7

#DEFINE SETPSPF BSF PIR1,7

#DEFINE CLRCP2F BCF PIR2,0

#DEFINE SETCP2F BSF PIR2,0

#DEFINE CLRBCF BCF PIR2,3

#DEFINE SETBCF BSF PIR2,3

#DEFINE T1ON BSF T1CON,0

#DEFINE T1OFF BCF T1CON,0

#DEFINE T2ON BSF T2CON,2

#DEFINE T2OFF BCF T2CON,2

#DEFINE EPRD BSF EECON1,0

#DEFINE EPNRD BCF EECON1,0

#DEFINE EPWR BSF EECON1,1 #DEFINE EPNWR BCF EECON1,1 #DEFINE EPWEN BSF

EECON1,2

#DEFINE EPWNE BCF EECON1,2 #DEFINE EEPOM BCF EECON1,7 #DEFINE FLASH BSF EECON1,7 #DEFINE PA PORTA

#DEFINE PB PORTB

#DEFINE PC PORTC

#DEFINE PD PORTD

#DEFINE PE PORTE

#DEFINE CLRPA CLRF PA

#DEFINE CLRPB CLRF PB

#DEFINE CLRPC CLRF PC #DEFINE CLRPD CLRF PD

#DEFINE CLRPE CLRF PE

#DEFINE TA TRISA

#DEFINE TB TRISB

#DEFINE TC TRISC

#DEFINE TD TRISD

#DEFINE TE TRISE

#DEFINE CLRTA CLRF TA

#DEFINE CLRTB CLRF TB

#DEFINE CLRTC CLRF TC

#DEFINE CLRTD CLRF TD

#DEFINE CLRTE CLRF TE

BANK0 MACRO

BCF STA TUS,RP0

BCF STA TUS,RP1

ENDM

BANK1 MACRO

BSF STATUS,RP0

BCF STATUS,RP1

ENDM

BANK2 MACRO

BCF STATUS,RP0

BSF STATUS,RP1

ENDM

BANK3 MACRO

BSF STATUS,RP0

BSF STATUS,RP1

ENDM

;******************

按键测试程序

INCLUDE #INCLUDE"MAIN.INC"

#INCLUDE"LEDSN.INC" #INCLUDE"DEL.INC"

#INCLUDE"KEYS.INC" DA T1 EQU 20H DA T2 EQU 21H DA T3 EQU 22H DA T4 EQU 23H ORG 00H

NOP

MAIN:

CALL MAINIT MLP:

CALL DEL

BTFSS 2FH,0

GOTO MLP

CALL KEYS

CALL DISP

BCF 2FH,0

GOTO MLP

DELA

LEDNS

KEYFS

KEYSA KEYS:

MOVF KID,0

ADDWF PCL,1

KTAB:GOTO KEYEN

GOTO KEYDEL

GOTO KEYSCAN

GOTO KEYUP

GOTO KEYPROC

CLRF KID

RETLW 0

KEYPROC:

CLRF KID

MOVLW DA T1

MOVWF FSR

MOVLW 2

MOVWF R1

MOVF V AL,0

MOVWF R0

KPL:

MOVF INDF,0

MOVWF KTMP

MOVF R0,0

MOVWF INDF

INCF FSR,1

MOVF INDF,0

MOVWF R0

MOVF KTMP,0

MOVWF INDF

INCF FSR,1

DECFSZ R1,1

GOTO KPL

KPEXT:

RETLW 0

MAINIT:

BANK1

MOVLW 0FH

MOVWF TD

CLRF TC

CLRF TB

BANK0

MOVLW 04H

MOVWF DA T1

MOVLW 6H

MOVWF DA T2

CLRF DA T3

CLRF DA T4

MOVLW 0FFH

MOVWF PB

MOVLW 0FFH

MOVWF PC

RETLW 0

END

;EPROM=1 EEPROM

;EPROM=2 FLASH

#DEFINE EPROM 2

ADR EQU 38H IF EPROM==1

EPFLASH MACRO

EPWRITE:

BANK3

BTFSC EECON1,WR

GOTO $-1

BANK2

MOVF ADR,W

MOVWF EEADR

MOVF DA T1,W

MOVWF EEDA TA

BANK3

BCF EECON1,EEPGD

BSF EECON1,WREN

BCF INTCON,GIE

MOVLW 0X55

MOVWF EECON2

MOVLW 0XAA

MOVWF EECON2

BSF EECON1,WR

BCF EECON1,WREN

BSF INTCON,GIE

RETLW 0

;READ DATA EEPROM EPREAD:

BANK2

MOVF ADR,W

MOVWF EEADR

BANK3

BCF EECON1,EEPGD

BSF EECON1,RD

BANK2

MOVF EEDA TA,W

MOVWF DA T1

RETLW 0

ENDM

ENDIF

;FLASH WRITE READ

IF EPROM==2

EPFLASH MACRO

ADRH EQU 39H

EPWRITE:

BANK3

BTFSC EECON1,WR

GOTO $-1

BANK2

MOVF ADR,W

MOVWF EEADR

MOVF ADRH,W

MOVWF EEADRH

MOVF DA T1,W

MOVWF EEDA TA

MOVF DA T2,W

MOVWF EEDA TH

BANK3

BSF EECON1,EEPGD

BSF EECON1,WREN

BCF INTCON,GIE

MOVLW 0X55

MOVWF EECON2

MOVLW 0XAA

MOVWF EECON2

BSF EECON1,WR

NOP

NOP

BCF EECON1,WREN

BSF INTCON,GIE

RETLW 0

;READ DATA EEPROM

EPREAD:

BANK2

MOVF ADR,W

MOVWF EEADR

MOVF ADRH,W

MOVWF EEADRH

BANK3

BCF EECON1,EEPGD

BSF EECON1,RD

NOP

NOP

BANK2

MOVF EEDA TA,W

MOVWF DA T1

MOVF EEDA TH,W

MOVWF DA T2

RETLW 0

ENDM

ENDIF

新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

新版汇编语言程序设计习题答案(钱晓捷主 编)

新版汇编语言程序设计习题答案(钱晓捷主编) 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕ 1001 1001(6)1011 ∨1001(7) 1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符? 1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1.12、简述Intel 80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。 1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

汇编语言程序的设计试卷与答案

汇编语言程序设计试卷 一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分) 1.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。 ① 无符号十进制数136 ② 带符号十进制数-120 ③ 压缩型BCD码十进制数88 ④ 8位二进制数-8的补码表示 2.指令指针寄存器是()。 ① IP ② SP ③ BP ④ PSW 3.当执行指令ADD AX,BX后,若AX的内容为2BA0H, 设置的奇偶标志位PF=1,下面的叙述正确的是()。 ① 表示结果中含1的个数为偶数 ② 表示结果中含1的个数为奇数 ③ 表示该数为偶数 ④ 表示结果中低八位含1的个数为偶数 4.完成将累加器AL清零,并使进位标志CF清零, 下面错误的指令是()。 ① MOV AL,00H ② AND AL,00H

③ XOR AL,AL ④ SUB AL,AL 5.下列指令执行后总是使CF=0,OF=0的是()。 ① AND ② NEG ③ NOT ④ INC 6.完成同指令XCHG AX,BX相同功能的指令或指令序列是()。 ① MOV AX,BX ② MOV BX,AX ③ PUSH AX POP BX ④ MOV CX,AX MOV AX,BX MOV BX,CX 7.设AH=0,AL=06H,BL=09H,执行指令 ADD AL,BL AAA 之后,其结果应是()。 ① AH=01,AL=05 ② AH=1 AL=15 ③ AH=0 AL=0FH ④ AH=0 AL=05 8.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为

汇编语言程序设计习题答案

第一章. 习题 1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H (2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH (4) 32767=111 1111 1111 1111B=7FFFH 1.2将下列二进制数转换为十六进制数和十进制数: (1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128 (3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=255 1.3将下列十六进制数转换为二进制数和十进制数: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91 (3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=4660 1.4完成下列十六进制数的运算,并转换为十进制数进行校核: (1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835 (3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=217893 1.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其 运算结果。 (1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76) 答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0 (2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0 (3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0; OF=0 (4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H; CF=0;OF=1 (5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH; CF=0;OF=1 (6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H; CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的 带符号数或无符号数时,它们所表示的十进制数是什么?

《汇编语言程序设计》考核方式

考核方式与要求 期末总成绩构成:期末开卷考试60% + 平时作业10% + 实验和实验报告30%。 1、试卷考核方式与要求 “汇编语言程序设计”的课程要求是使学生具有一定的程序设计能力。虽然课程是通过80x86微处理机来开展教学的,但学习的重点不仅仅是学会80x86指令的语法和规范,更重要的是通过多读程序、多练习编写程序来掌握程序设计的基本方法和技术,要求学生在工作中遇到其他机型,都应该能利用所掌握的方法和技术顺利解决实际问题。因此,我们在教学过程的各个环节,特别是具有指挥棒作用的考核环节中,着重体现了“能力培养是首位”的指导思想。 为此,汇编课一直实行多元化考核方式,在考核评分上,平时练习和上机实验占40%,期末考试占60%。期末考试实行开卷考试,这样学生平时学习的关注点就会放在分析问题和编程实现的方法上,有利于学生开阔思路,发挥自身创造力。每年设计开卷考试的考题是有一定难度的,教师必须非常熟悉课程的知识点、重点和难点,以及体现这些知识和能力水平的多种题目类型。 2、实验方式与要求 实验的目标为:加强课堂上相关理论和技术学习的有效性;提高学生上机编程和调试的能力;培养学生科学实践的理念和独立分析问题、解决问题的能力。其设计思想是:实验内容兼顾基础性和综合性,实验题目由简单→复杂,程序功能由单一→综合,实验安排有基本要求题+自选题,实验题类型有验证型和自主创新设计型。 √实验课组织形式: 1.系教学实验室按课程要求负责上机环境配置及实验设备管理; 2.以班为单位组织上机实验,并将上机时间安排表发至每位同学; 3.每单元实验课安排一位助教(助博)负责实验指导和答疑; 4.学生每做完一个实验即可提交老师验收,老师将实验运行结果记录下来作为实验成 绩的依据。验收时教师要注意发现比较突出的好的实验例题(完成时间短、程序运行效率高); 5.要求提交实验报告,根据实验报告及实验运行结果的记录,评出实验成绩,实验成 绩一般占总成绩的30%。 √教师指导方法: 1.大课集体指导。每学期实验前教师安排一次实验指导课,讲解实验方法和实验要求; 2.每次实验课都安排助教(助博)进行个别或集体的实验指导和答疑; 3.对具有共性的、问题比较多的实验,主讲教师在课堂上再进行集体指导; 4.每学期对实验中出现的问题,对照实验题目进行分析、总结,以利于以后的教学。 5.对于实验中有创新点的学生,还可以请他上讲台为同学们介绍他的设计思路,引发大家展开讨论。

河北工业大学汇编语言知识程序设计实验

汇编语言程序设计实验 网络*** *** 实验一 顺序与分支程序设计 一 、实验目的 1) 掌握顺序程序设计方法。 2) 掌握分支程序的结构及分支程序的设计,调试方法。 2) 学习数据传送及算术和逻辑运算指令的用法。 3) 熟悉在pc 机上建立、汇编、连接、调试和运行汇编语言程序的过程。 二、实验内容 1.实验六 从键盘上接收一位十进制数x ,计算y 值,并以十六进制形式显示出来,y 按下列公式计算。 ???????===-=+=) 6(2/) 5()4(2) 3(22 2 2X X X X X X X X X X Y 2..实验七 实验内容:从键盘上接收两个一位十六进制数x 和y ,然后再输入一个a-d 之间的一个字符,按下列要求计算。 a) 当输入字符为a ,则计算x+y ,并以十六进 制形式显示出来 b) 当输入字符为b ,则计算|x-y|,并以十六进制形式显示出来 c) 当输入字符为c ,则计算x*y ,并以十六进制形式显示出来 d) 当输入字符为d ,则计算x/y ,并以十六进制形式显示出来 三、实验代码 实验六 DATE SEGMENT X DB ?

DATE ENDS ;数据段 CODE SEGMENT ASSUME CS:CODE,DS:DATE START:MOV AX,DATE ;代码段 MOV DS,AX ;初始化ds寄存器 MOV AH,1 INT 21H ;读文件到缓冲区 CMP AL,33H ;比较指令 JB L0 ;A

汇编语言程序设计习题-答案

4.1 分析执行下列指令序列后的结果: 1)MOV AX,1234H MOV BX,00FFH AND AX,BX 【答】(AX)=0034H 2)MOV AL,01010101B AND AL,00011111B ;(AL)=00010101B OR AL,11000000B ;(AL)=11010101B XOR AL,00001111B ;(AL)=11011010B NOT AL 【答】(AL)=00100101B 3)MOV DL,05H MOV AX,0A00H MOV DS,AX MOV SI,0H MOV CX,0FH AGAIN: INC SI CMP [SI],DL LOOPNE A GAIN HLT 本程序实现了什么功能? 【答】在以0A001H开始的15个单元中查找05H。 4)MOV AX,DSEGADDR MOV DS, AX MOV ES,AX MOV SI, OFFSET B1ADDR MOV DI,OFFSET B2ADDR MOV CX,N CLD REP MOVSB HLT 本程序实现了什么功能? 【答】将B1ADDR中N个字节数据传送到B2ADDR开始的15个存储单元。 5)MOV AX, 0H MOV DS,AX MOV ES, AX MOV AL,05H MOV DI,0A000H MOV CX,0FH CLD AGAIN: SCASB LOOPNE AGAIN HLT 本程序实现了什么功能? 【答】从地址0A000H开始的15个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数据05H的查找。 4.2 阅读程序: 1). CLD LEA DI,[0100H] MOV CX, 0080H XOR AX, AX REP STOSW 本程序实现了什么功能? 【答】将DS中起始地址为0100H的128个字节单元清零。 2). MOV AL, 08H SAL AL,01H ;(AL)=00010000H MOV BL, AL MOV CL ,02H

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

汇编语言程序设计基本方法

第七章汇编语言程序设计基本方法1.教学目的:掌握微型汇编语言程序分析和设计方法 2.教学要求: ①熟悉汇编语言程序设计的基本步骤。 ②掌握程序流程图的使用,会利用其分析问题。 ③掌握汇编语言的顺序、分支、循环程序的设计。 ④了解实模式下80386及其后继机型的汇编语言的程序设计3.教学重点: ①利用流程图分析问题。 ②顺序、分支、循环程序的设计。 4.掌握难点: ①分支程序设计 ②循环程序设计 5.教学进程安排:P137~P168 6.教学方法: 课堂讲授 7.教学内容摘要: 7.1 汇编语言程序设计概述 7.1.1 汇编语言程序设计的基本步骤 1.分析问题,抽象出描述问题的数学模型 2.确定算法 3.绘制流程图 4.分配存储空间和工作单元 5.编写程序 6.静态检查 7.上机调试运行 7.1.2 程序流程图 1. 用自然语言表示算法 2. 流程图的组成 ⑴执行框(矩形框) ⑵判别框(菱形框) ⑶开始框和终止框 ⑷指向线 ⑸连接点 3. 三种基本结构和改进的流程图 ⑴传统流程图的弊端 ⑵三种基本结构 ①顺序结构 ②选择结构 ③循环结构

图7.4 顺序结构图图7.5 选择结构图 4. 结构化程序设计的特点 ⑴只有一个入口 ⑵只有一个出口 ⑶各功能框均可执行 ⑷结构中无死循环 7.2 顺序程序设计 顺序结构程序是最简单的程序,在顺序结构程序中,指令按照先后顺序一条条执行。 【例7-3】将—个字节压缩BCD码转换为两个ASCII码。 7.3 分支程序设计 7.3.1 分支程序的结构形式 分支程序结构可以有两种形式,如图7.6 (1) IF_THEN_ELSE结构 (2) CASE结构 7.3.2 分支程序设计方法 程序的分支一般用条件转移指令来产生,利用转移指令不影响条件码的特性,连续地使用条件转移指令使程序产生了多个不同的分支,而对于数组中的每一个数,它只能是多个分支中的某一个。 【例7-5】在附加段中,有一个按从小到大顺序排列的无符号数数组,其首地址存放在DI 寄存器中,数组中的第一个单元存放着数组长度,在AX中有一个无符号数,要求在数组中查找(AX),如找到,则使CF=0,并在SI中给出该元素在数组中的偏移地址;如未找到,则使CF=1。 【例7-6】折半查找算法程序 7.3.3 跳跃表法

实验二:简单汇编语言程序设计与调试

深圳大学实验报告 课程名称微型计算机技术 项目名称实验二:简单汇编语言程序设计与调试 学院 专业 指导教师 报告人学号 实验时间 2015-11-01 提交时间 2015-11-15 教务处制

一、实验目的与要求 1.1掌握使用运算类指令编程及调试方法。 1.2掌握运算类指令对各个状态标志位的影响及其测试方法。 二、实验内容与方法 8086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对表2-1所示的数据类型进行算术运算。 表2-1 数据类型算术运算表 2.1二进制双精度加法运算 2.1.1 实验要求: 计算X+Y=Z,将结果Z存入某存储单元。 2.1.2 实验原理: 本实验程序是双精度(2个16位,既32位)运算,利用累加器AX,先求低16位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需要用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。 2.1.3 参考程序清单: STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS DATA SEGMENT XL DW ?;请在此处给X低位赋值 XH DW ?;请在此处给X高位赋值 YL DW ?;请在此处给Y低位赋值 YH DW ?;请在此处给Y高位赋值 ZL DW ? ZH DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV AX,XL ;X的值送AX ADD AX,YL ;X低位加Y低位 MOV ZL,AX ;存低位和 MOV AX,XH ;X高位送AX ADC AX,YH ;X高位加Y高位 MOV ZH,AX ;存高位和 CODE ENDS END START 2.2十进制数的BCD码减法运算 2.2.1 实验要求: 计算X-Y=Z,其中X,Y,Z为BCD码。 2.2.2 参考实验程序及流程图如下: STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS DATA SEGMENT X DW ? ;请在此处给X赋值 Y DW ? ;请在此处给Y赋值 Z DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AH,00H SAHF MOV CX,0002H MOV SI,OFFSET X MOV DI,OFFSET Z A1: MOV AL,[SI] SBB AL,[SI+02H] DAS

汇编语言程序设计试题和答案

《汇编语言程序设计》试题 专业姓名成绩 一、单项选择题(每1分,共15分). 1将下列二进制数0111,1111,1111 转换为16进制数和10进制数是() A.07FFH 3021D B. 6FEH 1021D C. 07FFH 2012D D. 07FFH 2047D 2. 在1BM Pc机的IN和OUT 指令中,I/o端口号通常是由Dx寄存器来提供的,但有时也可以在 指令中用一个字节来表示端口号。试问可以直接由指令指定的I/o端口号有多少个?( ) A. 127D B.255D C. 256D D.128D 3. 设MYDAT是一个字变量,下列指令中,错误的是() A.MOV BX,10100B B.MOV DS,AX C.ADD BX,[10100H] D.MOV BX,MYDAT[SI] 4.设有关寄存器及存储单元的内容如下:(DS)=2000H,(BX)=0100H,(SI)=0002H, (20100)=12H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(20202)=0B7H,(21203)=65H,试指出:MOV AX,1100h[BX]指令执行后,AX寄存器内是() A.5678H B.4C2AH C.2A4CH D.7856H 5.一台微型计算机的字长为16位,如果采用字节编址,那么它可以访问的最大存储空间是多少字节 ( ),试用16进制数表示该机的地址范围() A.1M 0~FFFFFH B.64K 0~FFFFH C.128K 0~FFFFH D.128K –FFH~FFH 6. 如果在一个程序段开始执行之前,(cs)=0A7F0H,(1P)=2B40H,试问该程序段的第一个字的物 理地址是() A.BAA40H B.AAB40H C.AAA40H D.0D603H 7.下列指令哪个是错误的(设OP1,OP2 是已经用DB定义的变量名)( ) A.CMP BL,OP1 B.MOV [BX],111001B C. INC OP2 D.SAR AX,CL 8.假定(DX)=10111001B,(CL)=05,(CF)=1试确定:RCL DL,CL 指令执行后, DX中的值是() A.00CEH B.009DH C.00B9H D.003BH 9. 有符号定义语句如下: BUFF DB 1,2,3,‘123’ EBUFF DB 0 L EQU EBUFF - BUFF 问L的值为多少( ) A.6D B.7D C.3D D.5D. 10. IBMPC机中下列那些寄存器可以用来存储存储器地址() A、BX,BP,SP,CX B、AX,SI,DI,DX C、BX,SI,DI,SP D、DX,SI,DI,SP 11.下列指令中正确的是() A.MOV [BX],[SI] B.MOV AX,[SI][DI] C.MOV BX,OFFSET NAME[SI] D.MOV BYTE PTR [100],100 12下列程序段执行后,寄存器BX中的内容是什么()

汇编语言程序设计的实验环境及上机步骤

第1章汇编语言程序设计实验 1.1 汇编语言程序设计的实验环境及上机步骤 1.1.1 实验环境 汇编语言程序设计的实验环境如下。 1.硬件环境 微型计算机(Intel x86系列 CPU)1台。 2.软件环境 ·Windows 98/XP/Me/2000操作系统; ·任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等); ·汇编程序(MASM.EXE或TASM.EXE); ·链接程序(LINK.EXE或TLINK.EXE); ·调试程序(DEBUG.EXE或TD.EXE)。 本书建议文本编辑器使用EDIT或NOTEPAD,汇编程序使用MASM.EXE,链接程序使用LINK.EXE,调试程序使用TD.EXE。 1.1.2 上机步骤 汇编语言程序设计的实验2和实验3仅使用TD.EXE,关于TD.EXE的使用方法请参见附录B。下面介绍的上机实验步骤适用于除实验2和实验3的所有实验(包括硬件接口部分的全部实验)。 1.确定源程序的存放目录 建议源程序存放的目录名为ASM,并放在C盘或D盘的根目录下。如果没有创建过此目录,请用如下方法创建。 通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中单击右键,弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。 请把MASM5文件夹下的所有文件及TD.EXE都复制到此目录中。 2.建立ASM源程序 建立*.ASM源程序可以使用记事本文本编辑器。注意:保存时扩展名必须ASM。设建立的源文件为HELLO.ASM 3.用MASM.EXE汇编源程序产生OBJ目标文件 源文件HELLO.ASM建立后,要使用汇编程序对源程序文件汇编,汇编后产生二进制的目标文件(.OBJ文件)。具体操作如下: 方法一:在Windows中操作 用资源管理器打开源程序目录C:\ASM,把HELLO.ASM拖到MASM.EXE程序图标上。 方法二:在DOS命令提示符窗口中操作 选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令: I:>C:<回车> C:>CD\ASM<回车> C:\ASM>MASM HELL0.ASM<回车> 操作时的屏幕显示如图1所示。

IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明))

第五章 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答:程序段如下: BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H CMP AL, ‘a’ ;输入字符<‘a’吗 JB STOP CMP AL, ‘z’ ;输入字符>‘z’吗 JA STOP SUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可 MOV DL, AL ;显示一个字符的DOS调用 MOV AH, 2 INT 21H JMP BEGIN STOP: RET 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 答:程序段如下: BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H CMP AL, ‘a’ ;输入字符<‘a’吗 JB STOP CMP AL, ‘z’ ;输入字符>‘z’吗 JA STOP

DEC AL ;得到前导字符 MOV DL, AL ;准备显示三个字符 MOV CX, 3 DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用 INT 21H INC DL LOOP DISPLAY STOP: RET 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL和DL中。 答:程序段如下: DSEG SEGMENT STORE DB 4 DUP () DSEG ENDS ┇ BEGIN: MOV CL, 4 ;右移四次 MOV CH, 4 ;循环四次 LEA BX, STORE A10: MOV DX, AX AND DX, 0FH ;取AX的低四位 MOV [BX], DL ;低四位存入STORE中 INC BX SHR AX, CL ;右移四次 DEC CH

汇编语言程序设计实验报告

实验报告实验名称汇编语言程序设计 | | 专业班级:信息安全 学号: 姓名:

实验一汇编语言上机过程和Debug常用调试命令 一.实验目的: 学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。 二.实验题目: 熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在调试过程中,学习及掌握debug程序的各种操作命令。 三.问题描述: 试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。 四.方法说明: a)使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。 b)用汇编程序masm(或asm)对源文件汇编产生目标文件obj 如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。 c)用连接程序link 产生执行文件EXE. d)执行程序,可直接从DOS执行程序。 e)使用debug程序调试程序的方法。 五.实验步骤: 1.调用字处理程序EDIT 建立以sample.asm文件 datarea segment string1 db‘move the cursor backward.’ string2 db‘move the cursor backward.’ mess1 db ‘Match..’,13,10,’$’ mess2 db ‘No match!..’,13,10,’$’ datarea ends prognam segment main proc far assume cs:prognam,ds:datarea,es:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov es,ax lea si,string1 lea di,string2 cld mov cx,25

新版汇编语言程序设计【课后习题答案】1钱晓捷 主编

新版汇编语言程序设计【课后习题答案】钱晓捷主编电子工业出版社第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦阅读785 评论6 字号:大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

相关文档
相关文档 最新文档