⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4123.lst

📁 把地址偏移量为100H单元开始的256个单元分别写入00H
💻 LST
字号:
Turbo Assembler	 Version 4.1	    06/12/10 22:11:01	    Page 1
F:\study\汇编\4123.ASM



      1				     ;4-1,2,3
      2				     ;把地址偏移量为100H单元开始的256个单元分别写入00H,01H,...,FFH数据,
      3				     ;并统计0、正数、负数的个数,把统计结果送入上述数据块之后的3个单元中,
      4				     ;用DOS功能调用显示数据块各单元内容。
      5
      6	0000				     DATA  SEGMENT
      7						   ORG	     100H	 ;数据块在段中的偏移地址为100H
      8	0100  0100*(??)			     BUF1  DB	     256 DUP(?)	 ;buf1的256个单元存放数据
      9	      =0100			    COUNT  EQU	     $-BUF1	 ;数据块长度为256
     10	0200  03*(??)			     BUF2  DB	     3 DUP (?)	 ;BUF2的3个单元存放统计结果
     11	0203				     DATA  ENDS
     12
     13	0000				     CODE  SEGMENT
     14						   ASSUME    CS:CODE,DS:DATA
     15	0000  B8 0000s			   START:  MOV	     AX,DATA
     16	0003  8E D8				   MOV	     DS,AX
     17	0005  BE 0100r				   LEA	     SI,BUF1	 ;si指向buf1的首地址
     18	0008  B9 0100				   MOV	     CX,COUNT	 ;数据块的长度为256
     19	000B  32 C0				   XOR	     AL,AL	 ;al清零
     20	000D  33 DB				   XOR	     BX,BX	 ;bx清零
     21	000F  32 F6				   XOR	     DH,DH	 ;dh清零
     22	0011  88 04			   NEXT1:  MOV	     [SI],AL	 ;将AL的数据(00H~FFH)存入SI所指向的内存单元中
     23	0013  8A 24				   MOV	     AH,[SI]
     24	0015  80 FC 00				   CMP	     AH,0
     25	0018  74 07				   JZ	     ZERO	 ;若ZF=1,则该数为0,转至zero,DH加1
     26	001A  78 0A				   JS	     NEGATIVE	 ;若SF=1,则该数为负数,则转至NEGATIVE,BH加1
     27	001C  FE C3				   INC	     BL		 ;若SF=0,则该数为正数,则BL加1,即正数的个数加1
     28	001E  EB 0B 90				   JMP	     NEXT2
     29	0021  FE C6			    ZERO:  INC	     DH		 ;0的个数加1
     30	0023  EB 06 90				   JMP	     NEXT2
     31	0026  FE C7			NEGATIVE:  INC	     BH		 ;负数的个数加1
     32	0028  EB 01 90				   JMP	     NEXT2
     33	002B  FE C0			   NEXT2:  INC	     AL		 ;al加1
     34	002D  46				   INC	     SI		 ;si指向下一单元
     35	002E  E2 E1				   LOOP	     NEXT1
     36	0030  88 34				   MOV	     [SI],DH	 ;在数据块后存入0的总个数
     37	0032  46				   INC	     SI
     38	0033  88 1C				   MOV	     [SI],BL	 ;在0的总个数后存入正数的总个数
     39	0035  46				   INC	     SI
     40	0036  88 3C				   MOV	     [SI],BH	 ;在正数的总个数后存入负数的总个数
     41	0038  BE 0100r				   LEA	     SI,BUF1
     42	003B  B9 0103				   MOV	     CX,COUNT+3	 ;数据块的长度是259
     43	003E  B7 10			    LINE:  MOV	     BH,16	 ;每输出16个数回车换行
     44	0040  8A 04			   NEXT3:  MOV	     AL,[SI]
     45	0042  8A D8				   MOV	     BL,AL
     46	0044  D0 E8				   SHR	     AL,1	 ;将al中存的值逻辑左移4,则al中的值是bl的高四位
     47	0046  D0 E8				   SHR	     AL,1
     48	0048  D0 E8				   SHR	     AL,1
     49	004A  D0 E8				   SHR	     AL,1
     50	004C  E8 0022				   CALL	     EXCHANGE	 ;将al中的值转换为ASCII码
     51	004F  8A C3				   MOV	     AL,BL
     52	0051  24 0F				   AND	     AL,0FH	 ;al中的值是bl的低四位
     53	0053  E8 001B				   CALL	     EXCHANGE	 ;将其转换为ASCII码
     54	0056  B0 20				   MOV	     AL,20H	 ;输出空格
     55	0058  E8 0025				   CALL	     SHOW
     56	005B  46				   INC	     SI		 ;si指向下一单元
     57	005C  E2 03				   LOOP	     NEXT4
Turbo Assembler	 Version 4.1	    06/12/10 22:11:01	    Page 2
F:\study\汇编\4123.ASM



     58	005E  EB 27 90				   JMP	     STOP
     59	0061  FE CF			   NEXT4:  DEC	     BH		 ;bh减1
     60	0063  75 DB				   JNZ	     NEXT3
     61	0065  B0 0D				   MOV	     AL,0DH	 ;回车
     62	0067  E8 0016				   CALL	     SHOW
     63	006A  B0 0A				   MOV	     AL,0AH	 ;换行
     64	006C  E8 0011				   CALL	     SHOW
     65	006F  EB CD				   JMP	     LINE
     66
     67	0071				 EXCHANGE  PROC	     NEAR	 ;将al中的值转换为ASCII码
     68	0071  3C 0A				   CMP	     AL,0AH
     69	0073  78 02				   JS	     DONE
     70	0075  04 07				   ADD	     AL,7
     71	0077  04 30			    DONE:  ADD	     AL,30H
     72	0079  8A D0				   MOV	     DL,AL
     73	007B  B4 02				   MOV	     AH,02H
     74	007D  CD 21				   INT	     21H
     75	007F  C3				   RET
     76	0080				 EXCHANGE  ENDP
     77
     78	0080				     SHOW  PROC	     NEAR	 ;显示
     79	0080  8A D0				   MOV	     DL,AL
     80	0082  B4 02				   MOV	     AH,02H
     81	0084  CD 21				   INT	     21H
     82	0086  C3				   RET
     83	0087				     SHOW  ENDP
     84
     85	0087  B4 4C			    STOP:  MOV	     AH,4CH	 ;结束
     86	0089  CD 21				   INT	     21H
     87	008B				     CODE  ENDS
     88						   END	     START
Turbo Assembler	 Version 4.1	    06/12/10 22:11:01	    Page 3
Symbol Table




Symbol Name		Type   Value			   Cref	(defined at #)

??DATE			Text   "06/12/10"
??FILENAME		Text   "4123	"
??TIME			Text   "22:11:01"
??VERSION		Number 040A
@CPU			Text   0101H
@CURSEG			Text   CODE			   #6  #13
@FILENAME		Text   4123
@WORDSIZE		Text   2			   #6  #13
BUF1			Byte   DATA:0100		   #8  9  17  41
BUF2			Byte   DATA:0200		   #10
COUNT			Number 0100			   #9  18  42
DONE			Near   CODE:0077		   69  #71
EXCHANGE		Near   CODE:0071		   50  53  #67
LINE			Near   CODE:003E		   #43	65
NEGATIVE		Near   CODE:0026		   26  #31
NEXT1			Near   CODE:0011		   #22	35
NEXT2			Near   CODE:002B		   28  30  32  #33
NEXT3			Near   CODE:0040		   #44	60
NEXT4			Near   CODE:0061		   57  #59
SHOW			Near   CODE:0080		   55  62  64  #78
START			Near   CODE:0000		   #15	88
STOP			Near   CODE:0087		   58  #85
ZERO			Near   CODE:0021		   25  #29

Groups & Segments	Bit Size Align	Combine	Class	   Cref	(defined at #)

CODE			16  008B Para	none		   #13	14
DATA			16  0203 Para	none		   #6  14  15


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -